Microsoft 关于 C# Coding Conventions (C# Programming Guide) 的文章明确指出:
"Do not access a static member that is defined in a base class from a derived class."
为什么不应该访问静态成员?
似乎存在应该发生这种情况的有效场景,例如所有 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();
。它使用继承来方便地使用一组方法。
关于c# - 为什么是 "Do not access a static member that is defined in a base class from a derived class.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632586/