代码之家  ›  专栏  ›  技术社区  ›  Paul Mignard

C#在类构造函数中指定类属性有什么好处吗?

  •  3
  • Paul Mignard  · 技术社区  · 16 年前

    例如,如果我有这样一个类:

    namespace Sample
    {
         public Class TestObject
         {
              private Object MyAwesomeObject = new MyAwesomeObject();
         }
    }
    

    将其设置为在构造函数中这样设置属性有什么好处吗?

    namespace Sample
    {
         public Class TestObject
         {
              private Object MyAwesomeObject;
    
              public TestObject()
              {
                    MyAwesomeObject = new MyAwesomeObject()
              }
         }
    }
    
    9 回复  |  直到 16 年前
        1
  •  10
  •   Reed Copsey    16 年前

    这两者(几乎)相同。

    private Object MyAwesomeObject = new MyAwesomeObject(); 
    

    通过在构造函数中设置它,可以使用构造函数参数初始化成员。通常,这是必要的,以获得更多的信息到您的类成员。

    此外,在构造函数中设置值时,可以在静态上下文中使用类数据,这是内联方法无法做到的。例如,如果要使用表达式树初始化某些内容,通常需要在构造函数中进行初始化,因为表达式树位于静态上下文中,不允许在内联成员初始值设定项中访问类成员。

        2
  •  4
  •   tster    16 年前
    1. 它使逐步调试变得更容易

    2. 它可以根据某些逻辑或传入的参数将参数发送给构造函数,或发送给正在处理的对象。

        4
  •  1
  •   Joel Martinez    16 年前

    唯一的好处是,您可以在构造函数中更具动态性,其中内联初始化要求您仅对构造函数参数等使用静态值。例如,如果MyAwesomeObject需要配置文件中的值,则必须在构造函数中设置该值

        5
  •  1
  •   Li0liQ    16 年前

    字段会立即初始化 在对象的构造函数之前 指定一个字段的值,它将 覆盖字段中给定的任何值 宣言。

    看见 Fields (C# Programming Guide)

        6
  •  1
  •   Nathan Wheeler    16 年前

    在您的特定示例中,没有优势。

    namespace Sample
    {
         public Class TestObject
         {
              private Object m_MyAwesomeObject;
    
              public TestObject()
              {
    
              }
    
              public Object MyAwesomeObject
              {
                  get
                  {
                      if (m_MyAwesomeObject == null)
                          m_MyAwesomeObject = new Object();
    
                      return m_MyAwesomeObject;
                  }
              }
         }
    }
    
        7
  •  1
  •   Jason Too Cool Webs    16 年前

    我喜欢在类构造函数中保留任何类属性(无论是原语还是对象)的所有初始化。使代码更易于阅读。更容易调试。另外,构造函数的目的是初始化类属性。

        8
  •  1
  •   Dolphin    16 年前

    我不喜欢重复代码,即使它是在(希望是)少数构造函数中。为此,我倾向于在任何有意义的地方支持内联初始化。

        9
  •  0
  •   Steven Sudit    16 年前