微软关于C# Coding Conventions (C# Programming Guide)的文章明确指出:
“不要从a中访问基类中定义的静态成员 派生类。“
为什么不访问静态成员?
似乎有一些有效的情况会发生这种情况,例如所有const
成员都是静态的。派生类是否永远不能读取基类中定义的const成员?
答案 0 :(得分:6)
我们以object.ReferenceEquals
为例。以下是从派生类调用此方法的几种方法:
class A {
A() {
ReferenceEquals("a", "b"); //your warning is based on this style
object.ReferenceEquals("a", "b"); //recommended style
}
}
在ReferenceEquals
中可以访问A
的事实只是巧合。静态方法独立于任何继承层次结构。因此,始终从任何地方称之为完全合格。
这个警告只是关于风格和清晰度。我展示的所有变种都汇编到同一个IL。
不同的解释是您滥用继承来缩短用于调用方法的语法。这是滥用继承权。 ASP.NET MVC使用Controller基类执行此操作。它允许您编写return View();
。它使用继承来方便地使用一组方法。