微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#:构造函数调用顺序

请考虑以下代码

代码

public class RecursiveConstructor
{
   //When this constructor is called 
   public RecursiveConstructor():this(One(),Two())
   {
       Console.WriteLine("Constructor one. Basic.");
   }

   public RecursiveConstructor(int i,int j)
   {
       Console.WriteLine("Constructor two.");
       Console.WriteLine("Total = " + (i+j));
   }

   public static int One()
   {
       return 1;
   }

   public static int Two()
   {
       return 2;
   }
}

调用方法

public class RecursiveConstructorTest
{
    public static void Main()
    {
        RecursiveConstructor recursiveConstructor = new RecursiveConstructor();

        Console.ReadKey();
    }
}

结果

Constructor two.

Total = 3

Constructor one. Basic.

为什么第二个构造函数首先运行?

我明白,在链式构造函数中,我们首先称之为基类构造函数,然后使我们的方式备份在链中,但是当构造函数保存在同一个类中时,为什么我们仍然看到这种行为,首先调用额外的构造函数

我会认为最基本的构造函数内容将被执行.

解决方法

我认为编译器运行更安全的场景.
如果您在此处调用一个构造函数,那么这个其他构造函数有可能是当前构造函数的先决条件.这种行为与调用基础构造函数时暴露的行为一致,然后被预期.

当创建一个类的新实例时,有一个构造函数链从最专业的(对象类的构造函数)调用到最专业的(当前类的构造函数).

运算符:允许你明确地添加一个构造函数到这个链,所以这个顺序似乎是自然的.

原文地址:https://www.jb51.cc/csharp/91221.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐