如何从 child 强制调用基本方法

How to forcefully call a base method from child

我有多个 class 继承了一个抽象 class。我在基础 class 中创建了一种方法,它对所有 child class 都是通用的。我希望所有 child classes 强制调用该方法,否则应该显示编译错误。

我怎样才能做到这一点?

只需在基础 class 构造函数中进行调用。任何派生对象 必须 调用基础 class 构造函数,以便确保在创建对象时始终调用强制方法:

public abstract class Base
{
     protected Base()
     {
         //....
         mandatoryMethod();
     }

     private void mandatoryMethod() { ... }

     public abstract Foo Frob();
}

public class Derived: Base
{
     public Derived(....)
     {
         //new Base() will have been called when execution reaches this point.
     }

     public override Foo Frob() { ... }
}

当然这有一些限制:

  1. 如果 MandatoryMethod 需要在 Derived 的构造函数完成后调用 运行,这将不起作用。
  2. 如果您几乎没有定义的要求 "compulsory call" 意味着在调用任何 Derived 方法之前先调用 MandatoryMethod,这将不起作用,您也无法强制执行此操作。如果您拥有所有消费者的代码,则您唯一的选择是代码审查;如果您不拥有,则更改需求。

编译器的工作是编译合法代码并禁止非法代码。不从 Derived 调用 Base 中定义的任何给定方法没有任何违法行为;这是您的应用程序中的逻辑需求,而不是语言要求。您不能通过编译器强制执行此操作,您可以获得的最接近的方法是使用构造函数解决方案,其中编译器确实保证在构造 Derived 对象时实际上总是会调用 MandatoryMethod