我有多个继承抽象类的类。我在基类中创建了一个方法,它对所有子类都是通用的。我希望所有子类强制调用该方法,否则应显示编译错误。
我怎样才能做到这一点?
答案 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() { ... }
}
当然这有一些限制:
MandatoryMethod
构造函数运行完毕后需要调用Derived
,则无效。MandatoryMethod
方法之前调用Derived
,这将无效,并且您无法强制执行此操作。如果您拥有所有消费者的代码或更改要求,则唯一的选择是代码审核。编译器的工作是编译 legal 代码并禁止非法代码。不Derived
在Base
中定义的任何给定方法调用没有任何违法行为;这是您的应用程序中的逻辑需求,而不是语言要求。您无法使用编译器强制执行此操作,您可以获得的最接近的是使用构造函数解决方案,其中编译器确保在构造MandatoryMethod
对象时实际上始终会调用Derived
。