2015-07-16 3 views
2
namespace tutor4 
{ 
    class Class1 
    { 
     int _num = 2; 
     public int num 
     { 
      get 
      { 
       return _num; 
      } 
      set 
      { 
       _num = num; 
      } 
     } 
     public void incrementFunction() 
     { 
      num++; 
      Console.WriteLine("The value of _num is "+ num); 
     } 
    } 
} 

namespace tutor4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Class1 class1Obj = new Class1(); 
      for(int i=0;i<7;i++) 
       class1Obj.incrementFunction(); 
    } 
} 

Не знаю, почему _num не увеличивается, может ли кто-нибудь объяснить, пожалуйста?Почему поле поддержки моего имущества не меняет его значение?

+3

'установить _num = Num;', потому что вы установите его для себя, установите его в значение 'value' – Sayse

+1

Вы снова и снова устанавливаете одно и то же значение! – Mithrandir

ответ

16

Ваш неправильный адрес для num.

Он должен не быть

set 
{ 
    _num = num; 
} 

, потому что в этом случае он ничего не делает (наборы _num обратно к своему значению, так как геттер для num возвращается _num так эта строка эквивалентна _num = _num)

It должно быть

set 
{ 
    _num = value; 
} 

MSDN информация о value ключевого слова:

Значение контекстного используется ключевым словом в наборе аксессоре в обычных объявлений свойств. Он аналогичен входному параметру в методе . Значение слова ссылается на значение, которое клиентский код пытается присвоить свойству

Также обратите внимание: ваш num свойство только простой оберткой _num поля класса. Если вам не нужен какой-то сложной логики в геттер и сеттер для этого свойства - вы можете изменить его auto-implemented собственности, как это:

class Class1 
{ 
    public int num { get; set;} 

    public Class1 
    { 
     num = 2; 
    } 
} 

До C# версии 6 вы должны присвоить значение по умолчанию для автоматического Реализуемый имущества в классе конструктор.

В C# версии 6 (еще не выпущен, должен быть доступен этим летом), вы сможете присвоить значение по умолчанию для автоматического Реализуемый имущества в декларации:

public int num { get; set;} = 2; 
+4

Вероятно, вы должны объяснить, что такое 'значение', поскольку это может быть не очевидно для новичков. –

Смежные вопросы