直接写这个getter和setter有什么不同:
public string Name {get; set;}
并且像这样:
private string _name;
public string Name
{
get
{
return this._name;
}
set
{
this._name = value;
}
}
我在许多代码中看到了这一点。为什么他们使用私人成员而不是公共吸气者和制定者。
是表现还是隐私还是重点是什么? 谢谢。
答案 0 :(得分:2)
没有。
问题是:auto-implemented properties在C#3之前是不可用的(如果你看一下引用的文档:它会回到使用C#3发布的VS 2008),而不是所有代码都写完了在C#3时代。此外,并非所有开发人员都知道此功能。如果我偶然发现这种代码,我会重写它以使用自动实现的属性。
答案 1 :(得分:2)
直接编写getter和setter之间有什么不同 像这样
public string Name {get; set;}
它们基本相同。
下面的代码基本上是创建私有字段并为其提供getter和setter,这当然符合预期的想法。但是,语言实现者决定通过提供更短的语法来简化程序员的生活,您可以创建私有字段,同时提供getter或setter或两者兼而有之。
private string _name;
public string Name
{
get
{
return this._name;
}
set
{
this._name = value;
}
}
因此,在C#3中,他们(语言实现者)提出了通过使程序员同时创建私有字段并同时提供getter或setter或两者来缩短语法的想法。
在幕后,下面代码发生的一切都是编译器创建一个私有字段,并为它提供一个getter和setter。因此,基本上,它是更简洁,更简洁的语法,以实现与上述示例相同的任务。
自动实施的属性
public string Name {get; set;}
答案 2 :(得分:2)
属性只是一个简短的手,将在后台创建一个公共get方法,一个公共set方法和一个私有字段来存储该值。
示例代码
col1 | calculatedCol | col2
见图片
示例类只有代码col1 | col2 | calculatedCol
中的属性。
如果您使用Reflection从Sample类中获取所有成员,您将看到在运行时生成 // example property
public string Name { get; set; }
// at run time it is the same as:
private string Name;
public string GetName(){
return this.Name;
}
public string SetName(string name){
this.Name = name;
}
和Name
方法。
这些方法未在代码中指定。
答案 3 :(得分:1)
简短的回答,没有区别。编译器将“auto”属性转换为该样式,无论如何,它只是为您节省了几次击键。当你开始使用DataBinding或者必须在Set部分做其他事情时,它才真正发挥作用。
private string _name;
public string Name
{
get
{
return this._name;
}
set
{
this._name = value;OnPropertyChange();
}
}
在WPF / XAML / DataBinding中,这将允许任何订阅此对象的人知道名称为“Name”的属性已更改,并且应该在UI中反映出来。
答案 4 :(得分:0)
第一个被称为自动实现的属性。 如果要添加一些自定义代码逻辑来验证setter中的值,则使用第二个。
答案 5 :(得分:-1)
你可以控制吸气剂和吸气剂中发生的情况。 setters,如果该成员是公共的,则可以直接修改该变量。
private string _name;
public string Name
{
get
{
return this._name + " likes chocolate";
}
set
{
this._name = value;
}
}
在这里,您的私人_name始终保持不变,但访问姓名的任何人都会获得_name +“喜欢巧克力”。
在setter中,你可以做一些验证。