抽象类&子类的强制构造函数子类、函数、抽象类、amp

2023-09-04 01:35:16 作者:眸子里满是阴霾尘埃

可能的重复项: Why can’t I create an abstract constructor on an abstract C# class?

如何编写一个抽象类来说明子类必须有一个构造函数?

C 学习笔记10 多态篇

类似以下内容:

public abstract class FatherClass
{

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

    }

   // Someother code....
}

public class ChildClass1: FatherClass
{
    public ChildClass1(string val1, string val2)
    {
       // DO Something.....
    }
}

更新1:

如果我不能继承构造函数。如何防止有人忘记实现特定子类构造函数?

推荐答案

您不能。

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

protected FatherClass(string val1, string val2) {}

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

我认为您应该考虑使用abstract factory模式。如下所示:

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

class ChildClassFactory : IFooFactory
{
    public FatherClass Create(string val1, string val2) {
        return new ChildClass(val1, val2);
    }
}

只要需要创建FatherClass的子类的实例,就可以使用IFooFactory而不是直接构造。这使您能够强制使用(string val1, string val2)签名来创建它们。