如何从 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() { ... }
}
当然这有一些限制:
- 如果
MandatoryMethod
需要在 Derived
的构造函数完成后调用 运行,这将不起作用。
- 如果您几乎没有定义的要求 "compulsory call" 意味着在调用任何
Derived
方法之前先调用 MandatoryMethod
,这将不起作用,您也无法强制执行此操作。如果您拥有所有消费者的代码,则您唯一的选择是代码审查;如果您不拥有,则更改需求。
编译器的工作是编译合法代码并禁止非法代码。不从 Derived
调用 Base
中定义的任何给定方法没有任何违法行为;这是您的应用程序中的逻辑需求,而不是语言要求。您不能通过编译器强制执行此操作,您可以获得的最接近的方法是使用构造函数解决方案,其中编译器确实保证在构造 Derived
对象时实际上总是会调用 MandatoryMethod
。
我有多个 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() { ... }
}
当然这有一些限制:
- 如果
MandatoryMethod
需要在Derived
的构造函数完成后调用 运行,这将不起作用。 - 如果您几乎没有定义的要求 "compulsory call" 意味着在调用任何
Derived
方法之前先调用MandatoryMethod
,这将不起作用,您也无法强制执行此操作。如果您拥有所有消费者的代码,则您唯一的选择是代码审查;如果您不拥有,则更改需求。
编译器的工作是编译合法代码并禁止非法代码。不从 Derived
调用 Base
中定义的任何给定方法没有任何违法行为;这是您的应用程序中的逻辑需求,而不是语言要求。您不能通过编译器强制执行此操作,您可以获得的最接近的方法是使用构造函数解决方案,其中编译器确实保证在构造 Derived
对象时实际上总是会调用 MandatoryMethod
。