确保类的所有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分配任何东西,所以我如何使它抛出编译警告/错误?

确保类的所有NEW实例实现所有字段或属性

这是编译器不支持的,因为它不需要为所有属性赋值。您可以为它编写一个分析程序,但是在一些特殊的情况下,它会很快变得复杂。

注意,如果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; }
}