C# 继承构造函数?

C# 继承构造函数?,c#,inheritance,constructor,C#,Inheritance,Constructor,是否可以继承构造函数,如果可以,如何继承? 我试图创建一个继承系统类的类,我想要它的构造函数。这在普通C语言中是不可能的。构造函数不能简单地继承。它们必须在每个级别上重新定义,然后链接到父级的版本 class Parent { internal Parent(string str) { ... } internal Parent(int i) { ... } } class Child : Parent { internal Child(string str) : base(st

是否可以继承构造函数,如果可以,如何继承?
我试图创建一个继承系统类的类,我想要它的构造函数。

这在普通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) { ... }
}

这在香草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) { ... }
}

构造函数不像方法那样“继承”,但您可以选择调用基类构造函数:

public DerivedClass(Foo foo) : base(foo)

构造函数不像方法那样“继承”,但您可以选择调用基类构造函数:

public DerivedClass(Foo foo) : base(foo)

您不能继承构造函数;您必须显式调用它们,但默认构造函数除外,默认情况下,默认构造函数是:

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

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

您不能继承构造函数;您必须显式调用它们,但默认构造函数除外,默认情况下,默认构造函数是:

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

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

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

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 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关键字在同一继承级别内重载构造函数:


不。你可以为每个基本构造函数使用VS或R或其他类似的扩展自动生成构造函数。看起来我想的是一个重竖琴功能。如果你有,它在Resharper>Edit>GenerateCode下。。。。如果没有,你必须自己编写构造函数,正如Erik的答案所示。没有。不过,对于每个基本构造函数,都可以使用VS或R或其他类似的扩展自动生成构造函数。如果你有,它在Resharper>Edit>GenerateCode下。。。。如果没有,您将不得不自己编写构造函数,正如Erik的回答所示。不过,无参数构造函数是该规则的一个例外。如果没有任何其他构造函数,则会自动定义它们,并调用基类的无参数构造函数。这意味着您不必在每个级别上都重新定义它们。不过,无参数构造函数是该规则的一个例外。如果没有任何其他构造函数,则会自动定义它们,并调用基类的无参数构造函数。这意味着您不必在每个级别上重新定义它们。