确保类的所有NEW实例实现所有字段或属性
本文关键字:字段 属性 实现 NEW 确保 实例 | 更新日期: 2023-09-27 18:06:55
假设我有一个class
class Car
{
string color;
bool fourDoor;
int numberOfTires;
}
然后创建一个新实例
Car myCar = new Car();
myCar.color = "green";
myCar.fourDoor = true;
我没有给numberOfTires
分配任何东西,所以我如何使它抛出编译警告/错误?
这是编译器不支持的,因为它不需要为所有属性赋值。您可以为它编写一个分析程序,但是在一些特殊的情况下,它会很快变得复杂。
注意,如果Car
是一个struct
,那么可以通过一个非常特定的语法来检查(只有在你不首先初始化值的情况下),但是:这是非常微妙的,它不会帮助你,这不是一个好建议(这是在我们讨论可变结构体的问题之前)。
Car myCar = new Car(color: "green", fourDoor: true, numberOfTires: 42);
我显式使用参数名纯粹是为了可见性;它的效果和:
一样好Car myCar = new Car("green", true, 42);
这将映射到如下内容:
class Car
{
public string Color {get;}
public bool FourDoor {get;}
public int NumberOfTires {get;}
public Car(string color, bool fourDoor, int numberOfTires)
{
Color = color;
FourDoor = fourDoor;
NumberOfTires = numberOfTires;
}
}
对于这种情况,应该使用带参数的构造函数。看看这里:https://msdn.microsoft.com/en-us/library/k6sa6h87.aspx.
Jason为您的问题提供了一个很好的选择:https://stackoverflow.com/a/10720455/3836632
"我认为您的配置参数应该是readonly
(并且可以通过属性访问private
)。然后,将警告设置为错误。然后,当初始化其中一个变量失败时,将得到编译时错误
字段
CalculatorConfig.param1
永远不会被赋值,并且总是有它的默认值。
现在您已经在编译时发现了这个问题。"
- 列表项
可以在构造函数的实参中设置需要初始化的属性。这样就可以强制用户在对象创建过程中传递值。
公共类Car{公共汽车(字符串颜色,bool四门,int numberOfTires){这一点。Color =颜色;这一点。FourDoor =四门;这一点。NumberOfTires = NumberOfTires;}
public string Color { get; set; }
public bool FourDoor { get; set; }
public int NumberOfTires { get; set; }
}