struct构造函数调用this()

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()只是设置XY为零?这不是一个毫无意义的行动,因为事后他们立即被设定为xy

Jon*_*art 8

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()初始化列表可确保初始化所有字段,即使您不是这样做的.

  • 请注意:您的代码段会生成编译器错误而不是警告. (4认同)