为什么不要从派生类访问在基类中定义的静态成员
本文关键字:基类 定义 静态成员 访问 派生 为什么不 | 更新日期: 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
}
}
ReferenceEquals
在A
中可接近的事实只是一个巧合。静态方法独立于任何继承层次结构。因此,在任何地方都要调用它为完全限定符。
这个警告只是关于风格和清晰度。我所展示的所有变体都可以编译到同一个IL。
另一种解释是,您正在滥用继承来缩短用于调用方法的语法。这是对继承的滥用。ASP。. NET MVC通过Controller基类来实现这一点。它允许您编写return View();
。它使用继承来方便地使用一组方法