是的,它将指示运行时在 Triangle 之前调用基本 Shape 构造函数。
逻辑按以下顺序执行:
- 执行形状(int x)
- 执行三角形(int x)
因此,如果您有不同的构造函数重载,您可以直接调用它们。另请注意,如果您的基类具有无参数构造函数,则base()
如果您未指定一个,则本质上是隐式添加的。这意味着如果您的基类没有无参数构造函数,则所有子类都必须在其构造函数中有效base(...parameters...)
。
此外,您可以使用this()
而不是 base 来定位当前子类的构造函数。
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine("MyBaseClass Parameterless");
}
public MyBaseClass(string message)
{
Console.WriteLine("MyBaseClass Message: " + message);
}
}
public class MySubClass
{
public MySubClass()
{
Console.WriteLine("MySubClass Parameterless");
}
public MySubClass(string message)
: base(message)
{
Console.WriteLine("MySubClass Message: " + message);
}
public MySubClass(bool someUselessFlag)
: this()
{
Console.WriteLine("MySubClass bool someUselessFlag constructor");
}
}
输出将是:
var a = new MySubClass();
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless
var b = new MySubClass("Hello World!");
//outputs:
//MyBaseClass Message: Hello World!
//MySubClass Message: Hello World!
var c = new MySubClass(true);
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless
//MySubClass bool someUselessFlag constructor
构造函数会自行链接,直到最终调用Object()
基本构造函数。这就是为什么var c = new MySubClass(true)
调用两个以上的构造函数。