c# - 在下面的示例中,哪个构造函数将首先调用

标签 c# asp.net

在下面的示例中,哪个构造函数将首先调用?当我设置断点并执行时,它首先指向子构造函数,但执行了父类构造函数,为什么会这样?

有人可以帮我解释一下吗?

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/

相关文章:

c# - 将范围从一个容器复制到另一个容器

c# - 从 powershell 脚本记录到 csharp 程序(log4net - 日志文件)

c# - 不使用方法隐藏,为什么不调用父方法?

c# - 如何在下拉列表中添加占位符 C#

c# - 实体类型 ApplicationUser 不是当前上下文 Asp.Net MVC 模型的一部分

javascript - 用于从二进制流(字节数组)播放的视频播放器

c# - 在 .NET 中解析公式

c# - 具有 id 的实体已存在且在 CosmosDB 中不同时存在

c# - ASP.NET 中的 List<T> 和 ListViews 的 Dictionary<T>

c# - 通过 .NET/C# 发送传真