【问题标题】:Does a property need to be explicitly initialized? [closed]是否需要显式初始化属性? [关闭]
【发布时间】:2016-02-23 16:48:06
【问题描述】:

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

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?
}

【问题讨论】:

  • @Sinatr private 不是 readonly

标签: c# .net c#-6.0


【解决方案1】:

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

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

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

    public DeviceSettings ds{ get; private set; }
}

【讨论】:

    【解决方案2】:

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

    Property Initializers 可以在您想使用默认值初始化您的属性时为您提供帮助,例如:

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

    翻译成这样的:

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

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

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

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

    【讨论】:

      【解决方案3】:
      public DeviceSettings ds{ get; private set; } = new DeviceSettings();
      

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

      【讨论】:

        【解决方案4】:

        实例化你的类不需要初始化。

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

        【讨论】:

        • 不需要属性初始化。它将使用默认值初始化
        猜你喜欢
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多