【问题标题】:What's the best way to initialize a public property in C#?在 C# 中初始化公共属性的最佳方法是什么?
【发布时间】:2011-05-10 01:45:04
【问题描述】:

我需要给我的属性初始值,我想知道是否有比使用构造函数更简单的方法。

【问题讨论】:

  • 我很好奇为什么你认为演员不“简单”?
  • var myClass = new MyClass {Property1 = value1, Property2 = value2};

标签: c# oop class constructor properties


【解决方案1】:

您是否使用自动实现的属性?值类型属性将被初始化为其默认值。引用类型将被初始化为 null。

如果您希望它们将它们初始化为其他一些,我认为最好的选择是在构造函数中设置它们。

如果您不使用自动实现的属性,您可以在声明它们的位置初始化它们。

记住order in which the objects fields and constructors are initialized.也很有用

【讨论】:

    【解决方案2】:

    如果您正在利用自动属性,构造函数是最简单的方法。如果你不是,那么你的成员变量可以定义默认值。

    private string _someString = "Hello.";
    

    但是,您必须自己定义 getter 和 setter。

    public string SomeString
    {
        get { return _someString; }
        set { _someString = value; }
    }
    

    这不会比在构造函数中定义默认值更简单。

    【讨论】:

      【解决方案3】:

      如果你只是想初始化属性值,那么构造函数就足够了我不明白为什么你认为它们不简单。

      如果你愿意,你可以这样做,你可以像这样初始化变量:

      int _myProperty = 5;
      public int MyProperty
      {
        get{ return _myProperty ;}
      
       set { _myProperty=value; }
      }
      

      【讨论】:

        【解决方案4】:

        我喜欢以不同的方式思考这个问题。如果该值是创建实例的强制,则它需要是构造函数的参数。

        但是,如果该值是可选,那么通过属性设置它就可以了。

        【讨论】:

          【解决方案5】:

          构造函数最适合这样做。你怎么也可以调用方法。

          也检查以下链接 Initializing C# auto-properties

          【讨论】:

          • 这非常有效,特别是 [DefaultValue()] 解决方案。
          • 不,他们不是。就 CPU 速度而言,它们可能是最有效的方法,但就维护而言——如果参数 >1——最好使用就地分配,尤其是在不涉及特殊逻辑的情况下。示例:新 bar() { x = 5, y = 7 };这迫使类 bar 的用户命名所有属性/字段,而使用带参数的构造函数只允许使用名称(更不用说,后一种方法仅适用于 Net 4.0)。
          • @Giffyguy 再次检查“这非常有效”。根据 MSDN:“警告:DefaultValueAttribute 不会导致成员使用属性值自动初始化。您必须在代码中设置初始值。”在DefaultValueAttribute 上——正如我所学到的那样,谨慎地注意这个警告是明智的。这个“默认值”只能通过访问。反射——实际上并没有赋值(这个属性用于DataContractSerializer等,不保存默认值可以节省空间)。
          猜你喜欢
          • 1970-01-01
          • 2010-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          相关资源
          最近更新 更多