哪个对象初始化样式在C#中更合适?

时间:2012-12-31 14:58:00

标签: c#

哪种对象初始化样式在C#中更合适?

  • 声明私有对象并在同一行中初始化它:

    private List<ReportRow> rows = new List<ReportRow>();
    
  • 声明私有对象并在构造函数中初始化它:

    private List<ReportRow> rows;
    

    在构造函数

    rows = new List<ReportRow>();
    
  • 声明私有对象并在使用它的方法中初始化它:

    private List<ReportRow> rows;
    

    和我的Run()方法

     rows = new List<ReportRow>();
    

由于

4 个答案:

答案 0 :(得分:2)

所有这些都是合适的。这实际上取决于代码的细节。如果您只是将字段初始化为空列表,我的偏好是将其与声明一起初始化。如果您将值放入依赖于构造函数参数的列表中,那么我将在构造函数中初始化它。如果人口价格昂贵且可以跳过,那么我会在第一次调用消费代码时进行初始化。

答案 1 :(得分:1)

你的前两个选项是相同的;你应该使用你认为更清楚的任何一个 您还应该填写字段readonly

你的第三种选择是不同的;在您致电null之前,该字段将保持Run() 这可能不是一个好主意。

答案 2 :(得分:0)

选项

  

声明私有对象并在使用它的方法中初始化它。

是最好的 - 如果它在一个函数中使用,那么就不需要在构造函数中初始化它或在类级别声明它。

当您指定在构造函数中传入(注入)的值时,应该在构造函数中初始化对象。在构造函数中声明它意味着它已本地化到该范围,并且如果它没有在构造函数中使用并且仅在一个方法中使用,则在构造函数中初始化它没有多大意义 - 它应该作用于该方法。

答案 3 :(得分:0)

我会评论slugster的答案,并提到即使一个对象只用在一个方法中,如果初始化它的代价很高,最好在类级别声明它。您仍然可以使用它所使用的方法对其进行初始化,以便仅在必要时才进行初始化。但是,使用成员变量,您可以在初始化之前检查它是否为null,以便它只执行一次。

这个问题让我想念C ++中的静态局部变量,尽管如果你需要为每个类的实例提供不同的对象,那么这些变量也无济于事。