是否有可能在C#中指示构造强制调用实现方法? 我创建了一个强制实现类来实现方法的接口。现在我希望所有实现类的构造函数都调用此方法。
我知道我可以创建一个基类并在其构造函数中调用该方法,但我不能强制每个子类调用基类构造函数?
答案 0 :(得分:4)
不,抽象类将是你的解决方法。
public abstract class MyAbstract : IMyInterface
{
public MyAbstract()
{
MyMustCallmethod();
}
public abstract void MyInterfaceMember();//Let derived classes implement your interface
private void MyMustCallmethod()
{
//implementation
}
}
答案 1 :(得分:2)
当您将构造函数调用到继承类(例如B继承自A)时,也将调用继承类的构造函数。因此,如果您想确保从A继承的所有类都调用Foo方法,您可以在A构造函数中设置调用:
public class A {
public A() {
Foo();
}
public void Foo() {/* something here */}
}
public class B: A {
public B(string param) {/* A constructor will be called */}
}
下面的pke注释说明选择了默认构造函数。如果不存在默认构造函数,则必须显式调用构造函数。
但是你不能强制调用接口方法,因为接口不包含任何实现。使用上面的代码意味着只有A类才能实现接口。因此,为了确保继承类调用该方法并且必须明确定义它,我使用类似这样的东西:
public interface IHasFooThatMustBeCalledInConstructor {
void Foo();
}
public abstract class A: IHasFooThatMustBeCalledInConstructor {
public A() {
Foo();
}
public abstract void Foo();
}
public class B: A {
public B(string param) {}
public void Foo() { };
}