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

时间:2015-07-16 13:19:04

标签: 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(); 
    }
}

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

1 个答案:

答案 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;