ret*_*ide 8 c# constructor member
new构造函数和new成员声明之间有什么区别?
例
public class PspGame {
private List<string>name = new List<string>();
private List<string>_value;
public PspGame() {
_value = new List<string>();
}
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么,是否有任何性能问题?
aro*_*oth 10
它们非常相同(性能和内存使用方面的差异可以忽略不计).唯一真正的区别是,当你这样做时:
private List<string>name = new List<string>();
Run Code Online (Sandbox Code Playgroud)
...无论使用什么构造函数创建对象的实例,都会发生赋值.在构造函数中执行赋值时,只有在使用该特定构造函数时才会发生.
因此,如果您有多个构造函数但总是希望以name完全相同的方式初始化,则使用第一个表单比在每个构造函数中显式初始化它要短一些.
但是,作为一般规则,我更喜欢在构造函数实现中初始化字段,即使它确实在某些情况下使代码更加冗长.
对我来说,在构造函数(非默认构造函数)中有一个参数可以更好地进行测试。您可以将某些数据“注入”到成员字段中,如果不将该成员设为公共(或至少是内部)或使用“setter”属性进行第二次调用,则不一定能够做到这一点。
因为您可以有多个构造函数,所以如果您确实需要,可以使用第二个构造函数与默认构造函数一起进行测试。
除了稍后必须进行单独的调用来填充数据,或者通过多次调用类(一次用于创建对象,第二次用于填充成员)而导致代码难以维护之外,不存在任何真正的性能问题。
编辑:我意识到我回答了错误的问题。我以为他是在问默认构造函数和非默认构造函数之间的区别。现在我看到它是关于一个默认构造函数,它初始化构造函数中的成员与成员声明中的成员......