使用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; 组; 阻止,因此甚至可以节省更多代码.
那么,我在这里错过了什么?为什么有人真的想要使用自动属性?
以下方式定义属性之间是否存在差异 -
// private, with getter & setter
private string fName;
public string Name
{
get { return this.fName }
set { this.fName = value }
}
// define as a Property
public string Name { get; set;}
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) c# ×3
getter ×2
oop ×2
.net ×1
abstraction ×1
java ×1
object ×1
properties ×1
setter ×1
syntax ×1