Is it better to initialize class member variables on declaration
private List<Thing> _things = new List<Thing>(); private int _arb = 99;
or in the default constructor?
private List<Thing> _things; private int _arb; public TheClass() { _things = new List<Thing>(); _arb = 99; }
Is it simply a matter of style or are there performance trade-offs, one way or the other?
In terms of performance, there is no real difference; field initializers are implemented as constructor logic. The only difference is that field initializers happen before any ‘base’/’this’ constructor.
The constructor approach can be used with auto-implemented properties (field initializers cannot) – i.e.
Other than that, I tend to prefer the field initializer syntax; I find it keeps things localized – i.e.
I don’t have to go hunting up and down to find where it is assigned…
The obvious exception is where you need to perform complex logic or deal with constructor parameters – in which case constructor-based initialization is the way to go. Likewise, if you have multiple constructors, it would be preferable for the fields to always get set the same way – so you might have ctors like:
edit: as a side comment, note that in the above, if there are other fields (not shown) with field initializers, then they are only directly initialized in the constructors that call
base(...)– i.e. thepublic Bar(string foo)ctor. The other constructor does not run field initializers, since it knows they are done by thethis(...)ctor.