C#:如何从派生类的静态方法调用基类的静态方法?

Min*_*del 17 c# inheritance static base derived-class

在C#中,我有基类Product和派生类Widget.

产品包含静态方法MyMethod().

我想从静态方法Widget.MyMethod()调用静态方法Product.MyMethod().

我不能使用base关键字,因为它只适用于实例方法.

我可以显式地调用Product.MyMethod(),但如果我稍后将Widget更改为从另一个类派生,我必须修改该方法.

C#中有一些类似于base的语法允许我从派生类的静态方法中调用基类的静态方法吗?

Meh*_*ari 18

static方法基本上是从面向对象的概念中回退的方法.因此,它们在继承层次结构方面不是很灵活,并且不可能直接执行这样的操作.

我能想到的最接近的是using指令.

using mybaseclass = Namespace.BaseClass;

class MyClass : mybaseclass {

  static void MyMethod() {  mybaseclass.BaseStaticMethod();  }

}
Run Code Online (Sandbox Code Playgroud)

  • >静态方法基本上是一种后备方法......为什么这是真的?在我的类的代码中,依赖实例数据的方法是实例方法.不依赖于实例数据但仅依赖于参数(如果有)的方法是静态方法.我发现这种区别很有用. (4认同)
  • 我不同意静态方法不是面向对象的.它们可能经常以这种方式使用,但俗话说"你可以用任何语言编写Fortran".在最坏的情况下,概念是正交的.请参阅我的答案,了解一个经典案例,其中静态方法直接用于支持面向对象的范例,即Factory模式. (2认同)