使用getter和setter的优点是什么 - 只能获取和设置 - 而不是简单地使用公共字段来存储这些变量?
如果getter和setter做的不仅仅是简单的get/set,我可以非常快地解决这个问题,但我并不是100%清楚如何:
public String foo;
Run Code Online (Sandbox Code Playgroud)
更糟糕的是:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)
而前者需要很少的样板代码.
注意:这是在我开始使用C#时发布的.凭借2014年的知识,我可以真正地说,自动属性是C#语言中发生过的最好的事情.
我习惯使用私有和公共字段在C#中创建我的属性:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用.NET 3.0,我们获得了自动属性:
public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)
我知道这更像是一个哲学/主观问题,但除了为每个字段保存五行代码之外,是否有任何理由使用这些自动属性?我个人的抱怨是那些属性隐藏了我的东西,我不是黑魔法的忠实粉丝.
事实上,隐藏的私有字段甚至没有显示在调试器中,这是好的,因为get/set函数什么都不做.但是当我想实际实现一些getter/setter逻辑时,我必须使用私有/公共对.
我看到了我节省大量代码(一对六行)而不会失去以后更改getter/setter逻辑的能力的好处,但是我再次通过简单地声明一个公共字段"Public string Title"就可以做到这一点需要{get; 组; 阻止,因此甚至可以节省更多代码.
那么,我在这里错过了什么?为什么有人真的想要使用自动属性?
我想知道那些getter和setter声明之间的区别是什么,以及是否有一个首选方法(以及为什么).第一个可以由Visual Studio自动生成.其他人怎么样?谢谢
1
string _myProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
第2
string _myProperty;
public string myProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Run Code Online (Sandbox Code Playgroud)
第3
string _myProperty;
public string getMyProperty()
{
return this._myProperty;
}
public void setMyProperty(string value)
{
this._myProperty = value;
}
Run Code Online (Sandbox Code Playgroud) 两者之间有什么根本区别
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public string Name {get; set;}
Run Code Online (Sandbox Code Playgroud)