A():这个(默认)如何工作?

时间:2013-10-20 16:10:51

标签: c# constructor

在一个库(OpenTK)中,我看到了某个类的一个奇怪的构造函数。该类有一个静态类成员,其中包含该类的实例,其中包含所有字段的默认值。

看起来像这样(这不是实际的实现,只是要说清楚):

class A {
    public int number;
    public static A Default = new A(0);

    public A(): this(Default) { }

    public A(int number) {
        this.number = number;
    }
}

我想知道第一个ctor是如何工作的。好吧,结果A实例可能是Default的副本但是A的ctor被调用(默认)?它让我感到困惑,因为c#没有复制构造函数,并且没有声明接受其实例的A的显式构造函数。

我在网上搜索但是我不知道这种现象是如何被调用的,所以不起作用。此外,MS的c#文档没有提到这是可能的,据我所知,至少。

有谁知道这个细节?

平台: VS 2010 SP1 .NET 4.5

1 个答案:

答案 0 :(得分:3)

它是如何工作的?它没有,你发布的代码将无法编译。你是对的,C#中没有拷贝构造函数,所以如果你想要一个,你需要编写它。类似的东西:

public A(A a) : this(a.number) {}

另一种可能性是存在从Aint的隐式转换。