那里有很多建议你不应该公开地公开你的字段,而是使用普通的属性.我一遍又一遍地看到它.
我理解这些论点,但在大多数情况下我认为这不是一个好建议.
有没有人有一个真正重要的时间的例子?在写一个琐碎的财产时,将来可能会有一些重要的事情(或者当没有使用它时会让他们陷入真正的麻烦)?
编辑:DataBinding参数是正确的,但不是很有趣.DataBinding代码中的一个错误是它不接受公共字段.因此,我们必须编写属性来解决该bug,而不是因为属性是明智的类设计选择.
编辑:要清楚,我正在寻找现实世界的例子,而不是理论.真正重要的时刻.
编辑:在setter上设置断点的能力似乎很有价值.为调试器设计我的代码是不幸的:我宁愿调试器变得更聪明,但考虑到我们的调试器,我将采用这种能力.好东西.
Rob*_*son 25
在不确定的未来可能很难使代码工作,但这不是懒惰的借口.在字段上编码属性是惯例,它是务实的.称之为防御性编程.
其他人也会抱怨速度问题,但是JIT'er足够聪明,能够像暴露公共场地一样快.足够快,我永远不会注意到.
想到一些非平凡的事情
get
对set
可访问性(如公共获取,内部设置)您只需输入额外的13个字符即可.这似乎不像是投机性的普遍性.存在语义差异,如果没有别的,属性具有不同的语义含义,并且比公共字段更灵活.
public string Name { get; set; }
public string name;
Run Code Online (Sandbox Code Playgroud)
我记得有一次第一次使用.net时,我将几个类编码为只是字段,然后由于某种原因我需要将它们作为属性,而且当我第一次完成它时,完全浪费时间时间.
那么你有什么理由不遵守惯例呢?为什么你觉得需要游泳上游?没有这样做,它为你节省了什么?
Jar*_*Par 13
我有一个简单的属性,在调试时保存了几次..Net不支持数据断点(读或写)的概念.有时,在调试非常复杂的场景时,跟踪对特定属性的读/写非常重要.这对于一个属性很容易,但是对于一个领域来说是不可
如果您不在生产环境中工作,则可以很容易地重构字段 - >属性以进行调试.偶尔会遇到只能在生产环境中重现的错误,这些错误很难使用新的二进制文件进行修补.物业可以救你.
但这是一个相当有限的情况.
Joe*_*orn 12
杰伊,我曾经想过同样的事情.为什么要使用一个属性,只有那里提供直接访问私人会员?如果你可以把它描述为一个自动装置,那么拥有一个属性而不是一个领域似乎有点愚蠢.即使您需要更改实现,您也可以随后重构为不动产,任何相关代码仍可正常工作,对吧?好吧,也许不是.
你看,我最近看到了关于琐碎属性的亮点,所以也许现在我可以帮你做同样的事情.
最终让我信服的是相当明显的一点(回想起来).Net中的属性只是getter和setter方法的语法糖,而这些方法与属性本身有不同的名称.同一个程序集中的代码仍然有效,因为无论如何都必须同时重新编译它.但是,如果您将字段重构为属性,则链接到您的不同程序集中的任何代码都将失败,除非它同时针对您的新版本重新编译.如果它是一个从一开始的财产,一切都还是不错的.
Jas*_*ing 10
部分原因是这些属性在将来可能不会是微不足道的 - 如果将外部代码绑定到某个字段然后想要将其包装在属性中,则所有相关代码都必须更改,并且您可能无法要做到这一点,特别是在你是一名控制设计师或有你无法控制的图书馆等的情况下.
更不用说某些.NET实践不允许您特别使用字段 - 数据绑定.
我相信还有其他好的理由.为什么这对你很重要?使用自动属性并完成它.似乎不值得关注的事情......
Jon*_*eet 10
我会用另一个问题回答你的问题:你是否真的受益于不让所有类型和成员公开?我怀疑我没有通过这样做直接防止任何错误.但是,我已经正确地封装了我的类型,只暴露了暴露的内容.属性是相似的 - 好的设计比什么都重要.我认为属性在概念上与字段不同; 它们是合同的一部分,而不是从根本上实施的一部分.将它们视为属性而不是字段有助于我更清楚地思考我的设计,从而产生更好的代码.
哦,我偶尔从不破坏源兼容性,能够设置断点,日志访问等方面受益.
归档时间: |
|
查看次数: |
2679 次 |
最近记录: |