我对公共字段有问题,我在代码中不时使用它。我总是忘记将它们更改为私有并为它们创建属性 - 特别是当我测试代码的某些新部分时(并且我最初用来创建公共字段以进行测试)。
我在想,如果我在代码中使用公共字段,看到某种“警告”就好了。
我发现我可以创建一个规则集(我使用的是 Visual Studio Community 2013)并选择我需要的任何规则。我搜索了与公共字段相关的规则,发现了这些2:CA2211:非常量字段不应可见和CA1051:不要声明可见实例字段。我在规则集中检查了这些,尝试对整个解决方案运行代码分析,但我在结果中看不到任何警告。
我什至尝试在我的一门课程中添加类似
public int i;
的内容,但仍然一无所获。
您知道我是否有正确的规则,或者我是否应该采取其他措施来获得警告?谢谢。
对于任何正在寻找答案的人来说,在当今的
.editorconfig
:
规则 CA2211“非常量字段不应该是可见的”要么是考虑不周,要么是有缺陷的,或者两者兼而有之,表现在以下几个方面:
当规则说“非常量”时,它实际上并不意味着“非常量”;它的意思是“非只读”。该规则不是关于限制字段的可见性,除非它们是
const
,(这样做没有任何意义),它是关于限制字段的可见性,除非它们是 readonly
。
当规则说“字段”时,它实际上并不意味着“字段”;它的意思是“静态字段”。规则不检查实例字段。显然,根据微软的说法,可变静态字段值得警告,而可变实例字段则一切都很好。
因此,CA2211 不会针对
public int i;
发出警告,而且还不清楚它是否应该发出警告,因为它的描述非常混乱,以至于无法判断它一开始打算做什么。如果它没有按预期行事,那么它就是有缺陷的,如果它确实按预期行事,那么它就是大脑受损。
据我所知,没有其他规则可以满足作者(或任何理智的人)的要求,即警告任何可见的非只读字段,无论它们是实例字段还是静态字段。
考虑到 CA2211 的工作方式较慢,解决方法是完全避免任何可见实例字段,并启用 CA1051“不声明可见实例字段”来强制执行此操作。 这符合更广泛的代码分析规则哲学,它们假装让您能够自定义事物,但它们已经做出了一组非常具体且非常反复无常的选择,您最好坚持下去,否则会发生不好的事情。 “你可以选择任何你喜欢的颜色,只要是蓝色就可以”。