微软在C# Coding Conventions (C# Programming Guide)上的文章明确指出:
为什么不访问静态成员?
似乎在某些情况下应该发生这种情况,例如,所有const
成员都是静态的。派生类应该永远不能读取基类中定义的const成员吗?
最佳答案
让我们以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();
。它使用继承来方便地使用一组方法。