一尘不染

如何调用覆盖的虚拟方法的“基本实现”?

c#

给定以下代码,有没有办法我可以调用方法X的A类版本?

class A
{
  virtual void X() { Console.WriteLine("x"); }
}

class B : A
{
  override void X() { Console.WriteLine("y"); }
}

class Program
{
  static void Main()
  {
    A b = new B();
    // Call A.X somehow, not B.X...
  }

阅读 416

收藏
2020-05-19

共1个答案

一尘不染

使用C#语言构造,您不能从或范围 之外 显式调用基函数。如果您确实需要这样做,那么您的设计中就有一个缺陷-
即该功能不应该从一开始就是虚拟的,或者应该将基本功能的一部分提取为单独的非虚拟功能。A``B

您可以从BX 内部 调用AX

class B : A
{
  override void X() { 
    base.X();
    Console.WriteLine("y"); 
  }
}

但是那是另外一回事。

2020-05-19