继承构造函数?

时间:2012-02-06 22:06:32

标签: c# inheritance constructor

是否有可能继承构造函数,如果是,如何? 我正在尝试创建一个继承System类的类,我想要它的构造函数。

4 个答案:

答案 0 :(得分:7)

这在香草C#中是不可能的。构造函数不能简单地继承。必须在每个级别定义它们,然后将它们链接到父级版本。

class Parent { 
  internal Parent(string str) { ... }
  internal Parent(int i) { ... }
}

class Child : Parent {
  internal Child(string str) : base(str) { ... }
  internal Child(int i) : base(i) { ... }
}

答案 1 :(得分:4)

构造函数不会以与方法相同的方式“继承”,但您可以选择调用基类构造函数:

public DerivedClass(Foo foo) : base(foo)

答案 2 :(得分:2)

到目前为止,所有其他答案都是正确的。但是,要了解您不必将基类构造函数的签名与您定义的构造函数匹配:

public class Base
{
   public Base(string theString) { ... }
}

public class Derived:Base
{
   public Derived():base("defaultValue") //perfectly valid
   { ... }
   public Derived(string theString)
      :base(theString)
   { ... }
   public Derived(string theString, Other otherInstance)
      :base(theString) //also perfectly valid
   { ... }
}

...除了调用父类的构造函数之外,还可以使用this关键字在同一继承级别内“重载”构造函数:

public class FurtherDerived:Derived
{
   public FurtherDerived(string theString, Other otherInstance)
      :base(theString, otherInstance)
   { ... }

   public FurtherDerived()
      :this("defaultValue", new Other()) //invokes the above constructor
   { ... }
}

答案 3 :(得分:1)

你不能继承构造函数;你必须明确地调用它们(默认构造函数除外,默认情况下调用它):

class A
{
    public A (int i) { }
}

class B : A
{
    public B (int i) : base (i) { }
}