struct构造函数调用this()

时间:2015-03-16 04:16:58

标签: c# struct constructor initialization

我遇到了以下代码片段,并想知道以这种方式编写构造函数的目的是什么?

public struct DataPoint{
    public readonly long X;
    public readonly double Y;
    public DataPoint(long x, double y) : this() {
        this.X = x;
        this.Y = y;
    }
}

没有this()只是将XY设为零?这不是一个毫无意义的行为,之后会立即将其设置为xy吗?

1 个答案:

答案 0 :(得分:8)

public DataPoint(long x, double y) : this() {

这将调用struct默认构造函数,它由编译器自动提供,并将所有字段初始化为默认值。

在这种情况下,您的自定义构造函数无论如何都要分配所有字段,所以没有意义。但是,假设您只分配了X,并且没有调用默认构造函数:

public struct DataPoint{
    public readonly long X;
    public readonly double Y;
    public DataPoint(long x) {
        this.X = x;
    }
}

这会产生编译器错误,因为Y未在参数化构造函数中分配,并且因为您已经定义了它,所以默认构造函数对消费者不公开。

将<{1}}添加到初始化列表可确保初始化所有字段,即使您不是这样做的。