在下面的示例中,哪个构造函数将首先调用?当我设置断点并执行时,它首先指向子构造函数,但执行了父类构造函数,为什么会这样?
有人可以帮我解释一下吗?
class Program
{
static void Main(string[] args)
{
Child child = new Child();
child.print();
Console.ReadLine();
}
}
public class Parent
{
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent
{
public Child()
{
Console.WriteLine("Child Constructor.");
}
public new void print()
{
Console.WriteLine("I'm a Child Class.");
}
}
最佳答案
当从 C# 生成时,构造函数首先被基类调用,因此:
- 对象()
- 然后是Parent()
- 然后是 Child()
本质上,链接的 base:.ctor({args})
被添加到本地 .ctor
因此,您应该避免在构造期间调用虚拟方法,就好像 Child 覆盖它一样,它可能会失败,因为 Child 尚未初始化那里定义的字段(它们将为零)。
在 C++/CLI 中,您可以选择执行操作的顺序。
关于c# - 在下面的示例中,哪个构造函数将首先调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479098/