为什么在C#getter / setter中使用私有变量?

时间:2010-02-12 19:11:14

标签: c#

我一直都这么看:

    private int _myint;

    public int MyInt
    {
        get
        {
            return _myint;
        }
        set
        {
            _myint = value;
        }
    }

对我而言,这似乎与:

相同
    public int MyInt{ get; set; }

那么为什么每个人都做前者...为什么私人无所事事?!

9 个答案:

答案 0 :(得分:33)

首先,这是C#3.0的新功能,它在此之前并不存在。其次,如果你想为你的getter和setter添加任何自定义逻辑,你别无选择。所以,是的,在你没有自定义逻辑的例子中,它是同样的事情(实际上编译器在幕后为你生成)但是如果你想举例,或者类似的东西,你必须明确关于它。

答案 1 :(得分:6)

我想看看

public int MyInt{ get; private set; }

更多,;)

但@BFree钉了它

答案 2 :(得分:4)

首先,您使用的语法是新的。它在早期版本的C#中不存在。

其次,如果您要使用默认值,或者延迟加载结果,则需要私有变量。

答案 3 :(得分:4)

扩展@BFree所说内容的一个例子:

private int _Whatever; 
public int Whatever
{
    get {return _Whatever;}
    set 
    {
        if(value != _Whatever)
        {  
          // It changed do something here...
          // maybe fire an event... whatever

        } 

        _Whatever = value;

    }
}

答案 4 :(得分:2)

你喜欢那些你不知道弄乱私人部位的人吗?我希望不是。这是一种提供基本上代理你自己的东西但不想放弃控制权的方法。如果您决定要验证int是否为正数,则可以在显示代码时开始执行此操作。

C#现在使用自动属性使其透明。

答案 5 :(得分:2)

在C#3之前,这是唯一的方法。隐式类型的属性尚不可用。人们仍然希望抽象出私人成员。如果开发人员仍然在C#3中这样做,他们要么不知道新的更改,要么需要提供自定义的get / set逻辑。

答案 6 :(得分:2)

这是旧方法。你喜欢的方式(“自动属性”)它是一种相对较新的语言结构。几年前,我们总是不得不使用私有变量。

使用私有变量可能还有其他原因,但不是在您提供的简单示例中。例如,如果您需要使用默认值初始化该属性,则无法使用自动属性进行干净利落;相反,你需要在构造函数中初始化。

答案 7 :(得分:1)

public int MyInt{ get; set; }

是C#3.0中添加的一项名为“自动属性”的功能。 C#2.0不支持这一点,并且要求私有变量具有显式的getter和setter。因此,许多旧代码或向后兼容代码将使用显式getter和setter。

答案 8 :(得分:1)

如果您使用像reactor这样的工具查看编译器生成的输出,则添加了私有字段