是否有区别:
public T RequestedValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
public T RequestedValue;
Run Code Online (Sandbox Code Playgroud)
?
取自此代码:
public class PropertyChangeRequestEventArgs<T>:EventArgs
{
public PropertyChangeRequestEventArgs(T pRequestedValue)
{
RequestedValue = pRequestedValue;
}
public T RequestedValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*isF 23
第一个是Auto-Implemented属性,第二个是Field.常规属性公开Getters和Setter,但有一个私有字段来实际存储值:
private int someProperty;
public int SomeProperty
{
get { return someProperty; }
set { someProperty = value; }
}
Run Code Online (Sandbox Code Playgroud)
第一个允许您更改类的实现的某些方面,而不会影响应用程序中的所有其他代码.最重要的一点是,通过属性,可以在不破坏二进制兼容性的情况下进行更改(尽管通常可以在不破坏代码的情况下将字段更改为属性).如果是公共会员,建议您使用酒店.(从Snarfblam的评论中无耻地偷窃)
从"属性"页面:
属性是提供灵活机制来读取,写入或计算私有字段值的成员.属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法.这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性.
具有支持字段的属性是最灵活的形式,因为它们允许轻松实现诸如INotifyPropertyChanged用于在Model-View-ViewModel实现中更新UI 的事件.