当前位置:  开发笔记 > 编程语言 > 正文

为什么没有人接受C#中的公共字段?

如何解决《为什么没有人接受C#中的公共字段?》经验,为你挑选了4个好方法。

似乎每个C#静态分析器在看到公共字段时都想抱怨.但为什么?当然,有些情况下公共(或内部)领域就足够了,拥有它get_set_方法的财产是没有意义的吗?如果我确定我不会重新定义该字段或添加它(副作用是坏的,对吧?) - 不应该是一个简单的字段就足够了怎么办?



1> Cody Brociou..:

因为它破坏了封装 - 这就是大多数人大量使用访问器的原因.但是,如果您认为它是适合您任务的正确解决方案,请忽略它(意味着严格的封装投诉),并为您的项目做正确的事情.不要让OO纳粹告诉你.


封装不是隐藏信息.封装隐藏*实现*.我们的想法是,作为对象的客户端,您不想关心其属性是如何存储的,可以通过支持字段,通过访问其他聚合对象,通过直接访问数据库(无论这可能有多荒谬)似乎).属性提供了精确的抽象层.它们还允许非常实用的事情,例如验证.
这是他们的目标.访问器从外部封装对象的内部工作.
请忽略Iraimbilanja的评论,Cody是对的.
因此,如果您有一个属性透明地在数据库中获取/存储数据,那么这不是封装,因为它可以从外部访问?我想你需要重新检查你的封装定义......
访问者提供一定程度的间接.大多数时候你会看到得到; set;,但有时你真的需要隐藏内部细节.如果您首先使用Accessors,则不必添加大量代码.如果你不这样做,你将不得不,或者什么会破坏.

2> casperOne..:

这真的是关于面向未来的代码.当你说(强调我的):

如果我确定我不会重新定义该字段或添加它(副作用是坏的,对吧?) - 不应该是一个简单的字段就足够了怎么办?

这是一个绝对的陈述,正如我们所知(以及大多数静态分析仪),生命中只有两个绝对.

它只是试图保护你.如果这是一个问题,您应该能够告诉分析仪忽略它(通过依赖于您正在使用的分析工具的属性).


@kdbanman即使语法看起来相同,[从字段更改为属性是一个重大变化](http://stackoverflow.com/questions/863182/changing-fields-to-property-is-a-breaking-变化下什么情节).

3> Jorge Córdob..:

鉴于当前的C#3.0允许自动属性,其语法如下:

public int Property {get; set;}

在公共字段上使用属性所需的额外工作几乎为零.问题是你永远不能完全确定一个领域不会被不同地使用,或者访问者不会改变,并且在工作中给予权衡,没有理由不实现一个属性.

无论如何,分析仪抱怨高比例的事情(在这种情况下,例如99.99%的情况)是糟糕的编程实践......但无论如何它只是在抱怨.字段可以公开,并且在某些极端情况下,其直接使用可能是合理的.与以往一样,使用您的常识 ...但请记住最佳编程实践的基本规则...... 是否有一个非常好的理由来打破常规?如果有,那么继续,如果没有或如果答案是"它涉及更多的工作"然后坚持实践......


字段与属性行为不同的另一种情况是结构类型.如果`f`是`Rectangle`类型的字段,并且`p`是相同类型的属性,则对`thing.f.Width`的访问将只是一个直接整数访问,同时读取`thing.p. Width将需要复制`p`(其中的所有四个字段),然后访问该属性的`Width`字段.

4> Binary Worri..:

因为稍后更改公共字段以获取/设置访问器将破坏代码.有关更多信息,请参阅此答案

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有