首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#构造函数的执行顺序

C#构造函数的执行顺序
EN

Stack Overflow用户
提问于 2009-12-11 01:40:47
回答 5查看 64.1K关注 0票数 150

在C#中,当你这样做

代码语言:javascript
复制
Class(Type param1, Type param2) : base(param1) 

是先执行类的构造函数,然后调用超类构造函数,还是先调用基构造函数?

EN

回答 5

Stack Overflow用户

发布于 2009-12-11 01:43:26

它将首先调用基构造器。还要记住,如果你不把:base(param1)放在你的构造函数后面,基类的空构造函数就会被调用。

票数 61
EN

Stack Overflow用户

发布于 2009-12-11 01:43:56

首先调用基类的构造函数。

票数 17
EN

Stack Overflow用户

发布于 2016-08-17 04:05:06

不确定这是否应该是一个评论/答案,但对于那些通过示例学习的人来说,这个小提琴也说明了顺序:https://dotnetfiddle.net/kETPKP

代码语言:javascript
复制
using System;

// order is approximately
/*
   1) most derived initializers first.
   2) most base constructors first (or top-level in constructor-stack first.)
*/
public class Program
{
    public static void Main()
    {
        var d = new D();
    }
}

public class A
{
    public readonly C ac = new C("A");

    public A()
    {
        Console.WriteLine("A");
    }
    public A(string x) : this()
    {
        Console.WriteLine("A got " + x);
    }
}

public class B : A
{
    public readonly C bc = new C("B");

    public B(): base()
    {
        Console.WriteLine("B");
    }
    public B(string x): base(x)
    {
        Console.WriteLine("B got " + x);
    }
}

public class D : B
{
    public readonly C dc = new C("D");

    public D(): this("ha")
    {
        Console.WriteLine("D");
    }
    public D(string x) : base(x)
    {
        Console.WriteLine("D got " + x);
    }
}

public class C
{
    public C(string caller)
    {
        Console.WriteLine(caller + "'s C.");
    }
}

结果:

代码语言:javascript
复制
D's C.
B's C.
A's C.
A
A got ha
B got ha
D got ha
D
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1882692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档