是否需要显式初始化属性

本文关键字:初始化 属性 是否 | 更新日期: 2023-09-27 18:35:49

属性

是否需要像这样显式初始化:

public DeviceSettings ds{ get; private set; } = new DeviceSettings();

还是可以保持这种方式?

public class MyDevice
{
    public MyDevice(string serial, int patientid)
    {
    }
    public DeviceSettings ds{ get; private set; } //no initialization needed?
}

是否需要显式初始化属性

在您的

第一个示例中,ds设置为DeviceSettings的新实例,在第二个示例中,ds设置为default(DeviceSettings)如果该类型是类,则将null

如果您希望以第二种方式执行此操作并且您的类型是一个类,则需要在构造函数中添加赋值

public class MyDevice
{
    public MyDevice(string serial, int patientid)
    {
        ds = new DeviceSettings();
    }
    public DeviceSettings ds{ get; private set; }
}

创建类的新实例时,不需要初始化属性。 这主要取决于您的业务逻辑

属性

初始值设定项可以在您想要使用默认值初始化属性时为您提供帮助,例如:

private DateTime CreateOn { get; } = DateTime.UtcNow; 

翻译成这样:

private readonly createOn= DateTime.UtcNow;
public DateTime CreateOn 
{ 
   get
     {
        return createOn;
     } 
}

这是一个在初始化后将保持不可变的属性。

正如@ScottChamberlain在他的回答中指出的那样,您可以在类的构造函数中初始化自动实现的属性。如果这取决于作为参数传递给构造函数的外部值,这是初始化属性的好地方,例如:

public class Product
{
  private PriceCalculator Calculator {get;set;}
  public decimal Price{get {return Calculator.GetPrice();}}
  public Product(int factor)
  {
    Calculator=new PriceCalculator(factor);
  }
}
public DeviceSettings ds{ get; private set; } = new DeviceSettings();

该语法仅在 C# 6.0 中引入。所以完全没问题,不要初始化它。在这种情况下,它将获得默认值(取决于设备设置,是值还是引用类型)

实例

化类不需要初始化。

如果你要使用属性,你需要初始化它以获得正确的值(它主要是 null,因为在许多情况下 null 是默认值,除非你重新定义它或使用结构)。您可以使用 C#6 语法糖作为您的第一个示例或在构造函数中执行此操作。