C#:我可以删除“{get; 组; }”?
是否有区别:
public T RequestedValue { get; set; }
和
public T RequestedValue;
?
取自此代码:
public class PropertyChangeRequestEventArgs:EventArgs { public PropertyChangeRequestEventArgs(T pRequestedValue) { RequestedValue = pRequestedValue; } public T RequestedValue { get; set; } }
第一个是Auto-Implemented属性 ,第二个是Field 。 常规属性公开Getters和Setter,但有一个私有字段来实际存储值:
private int someProperty; public int SomeProperty { get { return someProperty; } set { someProperty = value; } }
第一个允许您更改类的实现的某些方面,而不会影响应用程序中的所有其他代码。 最重要的一点是,通过属性,可以在不破坏二进制兼容性的情况下进行更改(尽管通常可以在不破坏代码的情况下将字段更改为属性)。 如果是公共会员,建议您使用酒店。 (从Snarfblam的评论中无耻地偷窃)
从“属性”页面:
属性是提供灵活机制来读取,写入或计算私有字段值的成员。 属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。 这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。
具有支持字段的属性是最灵活的forms,因为它们可以轻松实现诸如INotifyPropertyChanged
事件之类的事件,以便在Model-View-ViewModel实现中更新UI。
深刻的解释!
{get; set;}是一个自动属性,而第二个是一个字段。
字段是包含数据的某种类型的普通变量。
属性是一些方法(有时它只是一个),一个用于获取,一个用于集合。 它们只有字段之类的语法,但实际上它们却完全不同。
属性通常用于过滤值集,或者在get中虚拟化某些内容等。
自动属性,也在幕后创建一个私有字段,在get中返回其值,并在集合中设置其值。
看起来这就像一个普通的领域,但是使用属性的幕后(IL)与使用领域完全不同。
a.Property1 = 4;
翻译成如下:
a.Set_Propert1(4);
还有这个:
x = a.Property1;
翻译成这样的东西:
x = a.Get_Property1();
那么为什么仅使用公共财产是好的做法,即使它们是自动的?
假设你正在编写一个由其他应用程序使用的库,并且有一天你想发布一个新版本的库,它限制了你的一个类的字段。
如果您正在使用属性,则可以只更改属性(即使它是自动属性,您可以将其替换为完整属性),然后使用您的库的任何应用程序仍然可以以相同的方式使用它。
但是如果你创建了一个你想要约束的公共字段,你需要为此创建一个属性并将该字段设为私有,但是如果你愿意的话,任何使用你库的应用程序都不会被打包,因为它使用字段和属性的方式是不同的。
你可以写:
public T RequestedValue { get; set; }
作为捷径:
private T _requestedValue; public T RequestedValue { get { return this._requestedValue; } set { this._requestedValue = value; } }
它们完全相同,也考虑了性能。
答案是,是的你可以删除{get; 组; 然而,有些人会说场和属性表达了截然不同的设计意图,但实际上,随着C#的演变和逐步模糊语法差异,这种区别已被侵蚀多年。
有关字段和属性之间的编译器 – 二进制级别差异的良好列表,请参阅SO – question – properties -between-field-in-c 。 但是这个问题的答案在声明接口时忽略了属性的特殊作用。
上述就是C#学习教程:C#:我可以删除“{get; 组; }”?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003247.html