如何从子

时间:2016-06-14 09:31:26

标签: c# asp.net inheritance parent-child

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

只需在基类构造函数中进行调用即可。任何派生对象必须调用基类构造函数,这样才能保证在创建对象时始终调用强制方法:

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. 如果您的要求很难定义,那么#34;强制通话"意味着在调用任何MandatoryMethod方法之前调用Derived,这将无效,并且您无法强制执行此操作。如果您拥有所有消费者的代码或更改要求,则唯一的选择是代码审核。
  3. 编译器的工作是编译 legal 代码并禁止非法代码。不DerivedBase中定义的任何给定方法调用没有任何违法行为;这是您的应用程序中的逻辑需求,而不是语言要求。您无法使用编译器强制执行此操作,您可以获得的最接近的是使用构造函数解决方案,其中编译器确保在构造MandatoryMethod对象时实际上始终会调用Derived