dev*_*ium 1 .net c# automatic-properties
我有以下一点代码:
public struct Interval
{
public double Min { get; set; }
public double Max { get; set; }
public Interval(double min = double.MinValue, double max = double.MaxValue)
{
Min = min;
Max = max;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说
在将控制权返回给调用者之前,必须完全分配自动实现的属性的备份字段.考虑从构造函数初始化程序中调用默认构造函数.
这是我不理解的,因为我的构造函数正在完全初始化此结构的值.不是吗?
您的构造函数正在尝试设置属性 - 在知道所有字段都已初始化之前,它无法执行.(在明确分配所有结构的字段之前,您无法调用任何实例方法或访问任何属性.)当您使用自动实现的属性时,它会显示一个怪癖:您拥有除了通过以外无法访问的字段属性,但在为字段赋值之前不能使用该属性!修复很简单 - 只需添加对无参数构造函数的调用:
public Interval(double min = double.MinValue, double max = double.MaxValue)
: this()
{
Min = min;
Max = max;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为无参数构造函数会将默认值分配给所有字段,之后您可以毫无问题地使用这些属性.
但是,我建议首先不要使用可变结构.