结构构造函数调用 this()
Struct constructor calls this()
我看到了以下代码片段,想知道以这种方式编写构造函数的目的是什么?
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
?
public DataPoint(long x, double y) : this() {
这会调用编译器自动提供的默认构造函数,并将所有字段初始化为默认值。
在这种情况下,您的自定义构造函数无论如何都会分配所有字段,因此没有意义。但是假设您只分配了 X
,并没有调用默认构造函数:
public struct DataPoint{
public readonly long X;
public readonly double Y;
public DataPoint(long x) {
this.X = x;
}
}
这会产生编译器错误,因为 Y
没有在您的参数化构造函数中赋值,并且因为您已经定义了它,所以默认构造函数对消费者不公开可见。
将 this()
添加到 初始化列表 确保所有字段都被初始化,即使您不是这样做的人。
我看到了以下代码片段,想知道以这种方式编写构造函数的目的是什么?
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
?
public DataPoint(long x, double y) : this() {
这会调用编译器自动提供的默认构造函数,并将所有字段初始化为默认值。
在这种情况下,您的自定义构造函数无论如何都会分配所有字段,因此没有意义。但是假设您只分配了 X
,并没有调用默认构造函数:
public struct DataPoint{
public readonly long X;
public readonly double Y;
public DataPoint(long x) {
this.X = x;
}
}
这会产生编译器错误,因为 Y
没有在您的参数化构造函数中赋值,并且因为您已经定义了它,所以默认构造函数对消费者不公开可见。
将 this()
添加到 初始化列表 确保所有字段都被初始化,即使您不是这样做的人。