如何强制所有实现在其构造函数中调用特定方法

时间:2014-03-17 11:12:10

标签: c# oop

是否有可能在C#中指示构造强制调用实现方法? 我创建了一个强制实现类来实现方法的接口。现在我希望所有实现类的构造函数都调用此方法。

我知道我可以创建一个基类并在其构造函数中调用该方法,但我不能强制每个子类调用基类构造函数?

2 个答案:

答案 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() { };
}