Com*_*eOn -1 c# inheritance constructor
我需要使用构造函数创建一个继承类,而不是在基类中定义的?问题是,构造函数在继承类需要:base()构造?如何在不更改基类的任何组件的情况下解决此问题?
否.创建派生类的实例始终为1意味着明确地或隐式地(并且可能间接地,通过派生类中的其他构造函数)链接到基类构造函数.
但它不一定是无参数构造函数.例如,您可以:
public class Base
{
private readonly int id;
public Base(int id)
{
this.id = id;
}
}
public class Derived : Base
{
public Derived(int id) : base(id)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但是,用于基类构造函数的参数的值不必与参数直接相关.例如,使用与上面相同的基类,您可以:
public class Derived : Base
{
private readonly string name;
public Derived(string name) : base(name.Length)
{
this.name = name;
}
public Derived() : base(-1)
{
this.name = null;
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是每个类都要确保以有效的方式构造它.例如,Base可能验证id是偶数,或类似的东西 - 如果在创建派生类的实例时可以绕过该验证,那将是非常糟糕的,因为其中的其余代码Base不能依赖于它.
1好吧,可能是奇怪的情况,由于序列化或其他类似的魔法,根本没有调用构造函数.忽略那些......