为什么我的财产的支持领域没有改变它的价值?

Kum*_*j K 2 c# properties

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(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么_num不增加,有人可以解释一下吗?

And*_*yev 16

你的num财产制定者是错的.

应该

set
{
     _num = num;
}
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下它什么也不做(将_num设置回其值,因为getter num返回,_num所以此行相当于_num = _num)

它应该是

set
{
     _num = value;
}
Run Code Online (Sandbox Code Playgroud)

关于value关键字的MSDN说明:

contextual关键字值在普通属性声明中的set访问器中使用.它类似于方法的输入参数.单词值引用客户端代码尝试分配给属性的值

另请注意:您的num属性只是_num类字段的简单包装.如果你不需要在getter和setter中为这个属性提供一些复杂的逻辑 - 你可以将它改为自动实现的属性,如下所示:

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

    public Class1
    {
        num = 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

在C#版本6之前,您应该在类构造函数中为自动实现的属性指定默认值.

在C#版本6(尚未发布,今年夏天应该可用)中,您将能够在声明中为默认值指定自动实现的属性:

public int num { get; set;} = 2;
Run Code Online (Sandbox Code Playgroud)

  • 你应该解释一下`value`是什么,因为它对初学者来说可能并不明显. (4认同)