fla*_*kes 6 c# constructor struct 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;
}
}
Run Code Online (Sandbox Code Playgroud)
不this()只是设置X和Y为零?这不是一个毫无意义的行动,因为事后他们立即被设定为x和y?
public DataPoint(long x, double y) : this() {
Run Code Online (Sandbox Code Playgroud)
这将调用默认的构造函数的struct,这是由编译器自动提供,并且将初始化为默认值的所有字段.
在这种情况下,您的自定义构造函数无论如何都要分配所有字段,所以没有意义.但是,假设您只分配了X,并且没有调用默认构造函数:
public struct DataPoint{
public readonly long X;
public readonly double Y;
public DataPoint(long x) {
this.X = x;
}
}
Run Code Online (Sandbox Code Playgroud)
这会生成编译器错误,因为Y未在参数化构造函数中分配,并且因为您已定义它,所以默认构造函数对于使用者而言不是公开可见的.
添加this()到初始化列表可确保初始化所有字段,即使您不是这样做的.