继承构造函数
本文关键字:构造函数 继承 | 更新日期: 2023-09-27 18:23:47
是否可以继承构造函数,如果可以,如何继承?我正在尝试创建一个继承System类的类,并且我想要它的构造函数。
这在普通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 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
{ ... }
}
您不能继承构造函数;您必须显式地调用它们(默认构造函数除外,默认情况下调用它):
class A
{
public A (int i) { }
}
class B : A
{
public B (int i) : base (i) { }
}