C#:我可以删除"{get; set;}"吗?

gda*_*rio 5 c#

是否有区别:

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 的事件.

  • 我认为最重要的一点是,通过属性,可以在不破坏二进制兼容性的情况下进行更改(尽管通常可以在不破坏代码的情况下将字段更改为属性).如果是公共会员,建议您使用酒店. (7认同)