2

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

4 回答 4

2

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

于 2012-12-31T15:05:45.647 回答
1

您的前两个选项是相同的;你应该使用你觉得更清楚的那个。
您还应该制作该字段readonly

您的第三个选项不同;该字段将保留null,直到您调用Run()
这可能不是一个好主意。

于 2012-12-31T14:59:04.540 回答
0

选项

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

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

当您分配在构造函数中传入(注入)的值时,您应该在构造函数中初始化对象。在构造函数中声明它意味着它被本地化到那个范围,如果它没有在构造函数中使用并且只在一个方法中使用,那么在构造函数中初始化它没有多大意义——它应该被限定为那个方法。

于 2012-12-31T15:04:17.817 回答
0

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

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

于 2012-12-31T23:28:31.757 回答