我一直都这么看:
private int _myint;
public int MyInt
{
get
{
return _myint;
}
set
{
_myint = value;
}
}
对我而言,这似乎与:
相同 public int MyInt{ get; set; }
那么为什么每个人都做前者...为什么私人无所事事?!
答案 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这样的工具查看编译器生成的输出,则添加了私有字段