似乎每个C#静态分析器在看到公共字段时都想抱怨.但为什么?当然,有些情况下公共(或内部)领域就足够了,拥有它get_
和set_
方法的财产是没有意义的吗?如果我确定我不会重新定义该字段或添加它(副作用是坏的,对吧?) - 不应该是一个简单的字段就足够了怎么办?
因为它破坏了封装 - 这就是大多数人大量使用访问器的原因.但是,如果您认为它是适合您任务的正确解决方案,请忽略它(意味着严格的封装投诉),并为您的项目做正确的事情.不要让OO纳粹告诉你.
这真的是关于面向未来的代码.当你说(强调我的):
如果我确定我不会重新定义该字段或添加它(副作用是坏的,对吧?) - 不应该是一个简单的字段就足够了怎么办?
这是一个绝对的陈述,正如我们所知(以及大多数静态分析仪),生命中只有两个绝对.
它只是试图保护你.如果这是一个问题,您应该能够告诉分析仪忽略它(通过依赖于您正在使用的分析工具的属性).
鉴于当前的C#3.0允许自动属性,其语法如下:
public int Property {get; set;}
在公共字段上使用属性所需的额外工作几乎为零.问题是你永远不能完全确定一个领域不会被不同地使用,或者访问者不会改变,并且在工作中给予权衡,没有理由不实现一个属性.
无论如何,分析仪抱怨高比例的事情(在这种情况下,例如99.99%的情况)是糟糕的编程实践......但无论如何它只是在抱怨.字段可以公开,并且在某些极端情况下,其直接使用可能是合理的.与以往一样,使用您的常识 ...但请记住最佳编程实践的基本规则...... 是否有一个非常好的理由来打破常规?如果有,那么继续,如果没有或如果答案是"它涉及更多的工作"然后坚持实践......
因为稍后更改公共字段以获取/设置访问器将破坏代码.有关更多信息,请参阅此答案