为什么"Do not access a static member that is defined in a base class from a derived class."



微软关于c#编码约定(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
 }
}

ReferenceEqualsA中可接近的事实只是一个巧合。静态方法独立于任何继承层次结构。因此,在任何地方都要调用它为完全限定符。

这个警告只是关于风格和清晰度。我所展示的所有变体都可以编译到同一个IL。

另一种解释是,您正在滥用继承来缩短用于调用方法的语法。这是对继承的滥用。ASP。. NET MVC通过Controller基类来实现这一点。它允许您编写return View();。它使用继承来方便地使用一组方法

相关内容

最新更新