抽象类>子类的必需构造函数

Sma*_*art 8 .net c# abstract-class

可能重复:
为什么我不能在抽象C#类上创建抽象构造函数?

我怎样才能编写一个抽象类来告诉子类必须有一个构造函数?

像这样的东西:

public abstract class FatherClass
{

    public **<ChildConstructor>**(string val1, string val2)
    {

    }

   // Someother code....
}

public class ChildClass1: FatherClass
{
    public ChildClass1(string val1, string val2)
    {
       // DO Something.....
    }
}
Run Code Online (Sandbox Code Playgroud)

更新1:

如果我不能继承构造函数.我怎样才能防止有人不会忘记实现那个特定的子类构造函数?

Mat*_*lls 19

你不能.

但是,您可以在FatherClass上设置一个构造函数,如下所示:

protected FatherClass(string val1, string val2) {}
Run Code Online (Sandbox Code Playgroud)

这迫使子类调用此构造函数 - 这将"鼓励"它们提供string val1, string val2构造函数,但不强制它.

我认为你应该考虑改为查看抽象工厂模式.这看起来像这样:

interface IFooFactory {
    FatherClass Create(string val1, string val2);
}

class ChildClassFactory : IFooFactory
{
    public FatherClass Create(string val1, string val2) {
        return new ChildClass(val1, val2);
    }
}
Run Code Online (Sandbox Code Playgroud)

无论何时需要创建FatherClass子类的实例,都可以使用IFooFactory而不是直接构造.这使您可以授权该(string val1, string val2)签名来创建它们.