为什么我的属性的支持字段不改变其值
本文关键字:改变 字段 支持 我的 属性 为什么 | 更新日期: 2023-09-27 18:03:14
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
没有增加,有人能解释一下吗?
您的num
属性设置错误。
不应该是
set
{
_num = num;
}
因为在这种情况下它什么都不做(将_num设置回它的值,因为num
的getter返回_num
,所以这一行相当于_num = _num
)
应该是
set
{
_num = value;
}
MSDN关于value关键字的说明:
上下文关键字值通常用于set访问器属性声明。它类似于a的输入参数方法。单词value引用客户端代码所在的值试图赋值给属性
还要注意:你的num
属性只是简单的包装_num
字段的类。如果你不需要这个属性的getter和setter中一些复杂的逻辑,你可以把它改成自动实现的属性,像这样:
class Class1
{
public int num { get; set;}
public Class1
{
num = 2;
}
}
在c#版本6之前,你应该在类构造函数中为自动实现的属性赋默认值。
在c#版本6(尚未发布,应该在今年夏天可用)中,您将能够在声明中为自动实现的属性分配默认值:
public int num { get; set;} = 2;