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
没有增加,有人可以解释一下吗?
答案 0 :(得分:16)
num
属性的setter是错误的。
set
{
_num = num;
}
因为在这种情况下它不执行任何操作(将_num设置回其值,因为num
的getter返回_num
所以此行等同于_num = _num
)
应该是
set
{
_num = value;
}
关于value关键字的MSDN说明:
contextual关键字值在普通的set accessor中使用 财产申报。它类似于a上的输入参数 方法。单词值引用客户端代码的值 试图分配给财产
另请注意:您的num
属性只是类_num
字段的简单包装。如果你不需要在getter和setter中为这个属性提供一些复杂的逻辑 - 你可以将它改为auto-implemented属性,如下所示:
class Class1
{
public int num { get; set;}
public Class1
{
num = 2;
}
}
在C#版本6之前,您应该为类构造函数中的自动实现属性指定默认值。
在C#版本6(尚未发布,今年夏天应该可用)中,您可以在声明中为默认值分配自动实现的属性:
public int num { get; set;} = 2;