为什么我的属性的支持字段不改变其值

本文关键字:改变 字段 支持 我的 属性 为什么 | 更新日期: 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;