2016-02-05 3 views
-1

In Encapsulation get is readonly где set только для записиИнкапсуляция: что возвращает Геттер?

Почему мой выход равен 11110, если не используется специальная функция-член?

код:

class practice_4 
{ 
    static void Main(string[] args) 
    { 
     example ABC = new example(); 
     // ABC.Roll_ = 11; 
     Console.WriteLine(ABC.Roll_); 
     Console.ReadLine(); 

    } 
} 
class example 
{ 
    private int roll = 11110; 
    public int Roll_ 
    { 
     get 
     { 
      return roll ; 
     } 
     //set{ 
     // if (value > 10) 
     // { roll = value; } 
     // else 
     // { Console.WriteLine("error"); } 

     //} 
    } 
    //public example() 
    //{ 
    // roll = 110; 
    //} 

} 

Выход:

, но когда я использую специальную функцию-член: общественный пример()

class practice_4 
{ 
    static void Main(string[] args) 
    { 
     example ABC = new example(); 

     Console.WriteLine(ABC.Roll_); 
     Console.ReadLine(); 

    } 
} 
class example 
{ 
    private int roll = 11110; 
    public int Roll_ 
    { 
     get 
     { 
      return roll ; 
     } 

    } 
    public example() 
    { 
     roll = 110; 
    } 

} 

так это отображение Выход:

и отбрасывать 11110

ответ

1

Чтобы ответить на ваш вопрос «Почему мой выход равен 11110, когда не используется специальная функция-член?»

Специальная функция-член в классе является Constructor вашего класса, что означает, что это специальная функция, которая инициализирует/конструирует свой объект из определения класса, правило помнить здесь есть, конструкторы вызываются после того как ваш private variables, а также когда конструктор завершен, конструкция завершена, что означает, что теперь внутреннее состояние (переменные) вашего класса назначено (между прочим).

Однако, если вы инициализируете частные переменные, например, вы находитесь в строке private int roll = 11110;, эта строка выполняется до вызова конструктора. но по мере того как вы переписываете значение роли в конструкторе, значение вашей личной переменной перезаписывается.

+0

Почему отображая выход: и отбросить 11110 где я был инициализирован частный ИНТ рулет = 11110; , где специальная функция-член будет вызываться только тогда, когда я объявил приватный int roll; Просто недопонимание .... –

0

В примере класса вы вызываете переменную рулонной вместо свойства Roll_. Если вы попытаетесь установить Roll_ вместо этого, вы получите ошибку времени компиляции, говорящую о том, что вы не можете изменить свойство только для чтения. Цель инкапсуляции заключается в том, чтобы предотвратить внешний мир от непосредственного изменения значения, он не предназначен для предотвращения изменения класса классом.