我遇到了以下代码片段,并想知道以这种方式编写构造函数的目的是什么?
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()
只是将X
和Y
设为零?这不是一个毫无意义的行为,之后会立即将其设置为x
和y
吗?
答案 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}}添加到初始化列表可确保初始化所有字段,即使您不是这样做的。