<摘要类>子类的强制构造函数

时间:2009-09-08 11:01:04

标签: c# .net abstract-class

  

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

如何编写一个抽象类,告诉子类必须有一个构造函数?

这样的事情:

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:

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

4 个答案:

答案 0 :(得分:18)

你不能。

但是,您可以在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)签名来创建它们。

答案 1 :(得分:0)

问题是默认情况下,非抽象/静态类总是会有一个默认的空公共构造函数,除非用私有的Constructor(){....}覆盖它。我不认为你可以强制一个带有2个字符串参数的构造函数出现在子类中。

答案 2 :(得分:0)

您不继承构造函数。你只需要在每个子类中自己实现一个。

答案 3 :(得分:0)

你不能将构造函数设置为抽象,但你可以这样做:

 public abstract class Test
    {
        public Test(){}

        public Test(int id)
        {
            myFunc(id);
        }

        public abstract void myFunc(int id);
    }