为什么"不要从派生类访问基类中定义的静态成员。"

时间:2014-05-13 13:27:03

标签: c# inheritance static

微软关于C# Coding Conventions (C# Programming Guide)的文章明确指出:

  

“不要从a中访问基类中定义的静态成员   派生类。“

为什么不访问静态成员?

似乎有一些有效的情况会发生这种情况,例如所有const成员都是静态的。派生类是否永远不能读取基类中定义的const成员?

1 个答案:

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