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

本文关键字:基类 定义 静态成员 访问 派生 为什么不 | 更新日期: 2023-09-27 18:03:11

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