构造函数中的new与成员声明中的new有什么区别?

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完全相同的方式初始化,则使用第一个表单比在每个构造函数中显式初始化它要短一些.

但是,作为一般规则,我更喜欢在构造函数实现中初始化字段,即使它确实在某些情况下使代码更加冗长.


Kil*_*ine 4

对我来说,在构造函数(非默认构造函数)中有一个参数可以更好地进行测试。您可以将某些数据“注入”到成员字段中,如果不将该成员设为公共(或至少是内部)或使用“setter”属性进行第二次调用,则不一定能够做到这一点。

因为您可以有多个构造函数,所以如果您确实需要,可以使用第二个构造函数与默认构造函数一起进行测试。

除了稍后必须进行单独的调用来填充数据,或者通过多次调用类(一次用于创建对象,第二次用于填充成员)而导致代码难以维护之外,不存在任何真正的性能问题。

编辑:我意识到我回答了错误的问题。我以为他是在问默认构造函数和非默认构造函数之间的区别。现在我看到它是关于一个默认构造函数,它初始化构造函数中的成员与成员声明中的成员......