哪种对象初始化样式在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>();
由于
答案 0 :(得分:2)
所有这些都是合适的。这实际上取决于代码的细节。如果您只是将字段初始化为空列表,我的偏好是将其与声明一起初始化。如果您将值放入依赖于构造函数参数的列表中,那么我将在构造函数中初始化它。如果人口价格昂贵且可以跳过,那么我会在第一次调用消费代码时进行初始化。
答案 1 :(得分:1)
你的前两个选项是相同的;你应该使用你认为更清楚的任何一个
您还应该填写字段readonly
。
你的第三种选择是不同的;在您致电null
之前,该字段将保持Run()
这可能不是一个好主意。
答案 2 :(得分:0)
选项
声明私有对象并在使用它的方法中初始化它。
是最好的 - 如果它在一个函数中使用,那么就不需要在构造函数中初始化它或在类级别声明它。
当您指定在构造函数中传入(注入)的值时,应该在构造函数中初始化对象。在构造函数中声明它意味着它已本地化到该范围,并且如果它没有在构造函数中使用并且仅在一个方法中使用,则在构造函数中初始化它没有多大意义 - 它应该作用于该方法。
答案 3 :(得分:0)
我会评论slugster的答案,并提到即使一个对象只用在一个方法中,如果初始化它的代价很高,最好在类级别声明它。您仍然可以使用它所使用的方法对其进行初始化,以便仅在必要时才进行初始化。但是,使用成员变量,您可以在初始化之前检查它是否为null,以便它只执行一次。
这个问题让我想念C ++中的静态局部变量,尽管如果你需要为每个类的实例提供不同的对象,那么这些变量也无济于事。