微软在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();。它使用继承来方便地使用一组方法。

09-09 20:42