可能重复:
Difference between Property and Field in C# .NET 3.5+
Why should I use an automatically implemented property instead of a field?
以下两个示例完全相同,在类内外都有相同的访问写入...那么为什么每个人似乎都使用示例1作为示例2? 我确定我只是遗漏了一些东西,但这一直困扰着我一段时间而且我找不到明确的答案。
class SampleClass
{
/// Example 1
/// Shown by online examples.
/// Why use a Field AND a Property where you could just use Example 2?
private int age;
public int Age { get { return age; } }
private void setAge()
{
age = 1;
}
/// Example 2
/// Tidier code and better understanding of how Age2 can be accessed.
/// Personally I prefer this method, though am I right to use it over Example 1?
public int Age2 { get; private set; }
private void setAge2()
{
Age2 = 1;
}
}
答案 0 :(得分:1)
如果要在属性设置器或getter上提供任何实际功能,则必须使用支持字段。例如,如果要对setter进行验证,则需要使用支持字段。
public class MyClass
{
private string myString = "blah";
public string MyNotNullString
{
get
{
return this.myString;
}
set
{
if (value == null)
{
throw new ArgumentNullException("Cannot set MyNotNullString to null");
}
this.myString = value;
}
}
}
答案 1 :(得分:0)
如果可能的话,我会尽可能使用Example2来处理整洁因素...除非我需要一个字段,就像@Platinum Azure回答一样。
我能想到的Example1唯一的另一个好处是你可以在getter或setter方法中设置一个断点,作为一种快速找出更改值的方法。
答案 2 :(得分:0)
如果我使用VS2008或更高版本并且不需要在VS2005中编译,通常我会使用速记或:
public string SomeProperty { get; set; }
但有时您需要一个支持字段,尤其是当您实现INotifyPropertyChanged时。
private string _someProperty;
public string SomeProperty
{
get { return _someProperty; }
set
{
_someProperty = value;
OnPropertyChanged("SomeProperty");
}
}
但即使我有一个支持字段,我仍然通过属性设置值,以保持一致性。