在声明时初始化类成员变量更好吗
private List<Thing> _things = new List<Thing>(); private int _arb = 99;
或默认构造函数中?
private List<Thing> _things; private int _arb; public TheClass() { _things = new List<Thing>(); _arb = 99; }
仅仅是样式问题还是性能折衷,一种或另一种方式?
在性能方面,没有真正的区别;字段初始化程序被实现为构造函数逻辑。唯一的区别是,字段初始化程序发生在任何“ base” /“ this”构造函数之前。
构造器方法可以与自动实现的属性一起使用(字段初始化器不能)-即
[DefaultValue("")] public string Foo {get;set;} public Bar() { // ctor Foo = ""; }
除此之外,我倾向于使用字段初始化器语法。我发现它使事情保持本地化-即
private readonly List<SomeClass> items = new List<SomeClass>(); public List<SomeClass> Items {get {return items;}}
我不必上上下下寻找它的分配位置…
一个明显的例外是需要执行复杂的逻辑或处理构造函数参数的情况- 在这种情况下,基于构造函数的初始化是必经之路。同样,如果您有多个构造函数,则最好始终以相同的方式设置字段-因此您可能会有以下类似的ctor:
public Bar() : this("") {} public Bar(string foo) {Foo = foo;}
编辑:作为附带的注释,请注意,在上面,如果还有其他带有字段初始值设定项的字段(未显示),则只能在调用的构造函数base(...)(即public Bar(string foo)ctor)中直接对其进行初始化。另一个构造函数 不 运行字段初始化程序,因为它知道它们是由this(...)ctor 完成的。
base(...)
public Bar(string foo)
this(...)