When I first started working with object-oriented programming languages, I was taught the following rule:
When declaring a field in a class, don’t initialize it yet. Do that in the constructor.
An example in C#:
public class Test { private List<String> l; public Test() { l = new List<String>(); } }
But when someone recently asked me why to do that, I couldn’t come up with a reason. I’m not really familiar with the internal workings of C# (or other programming languages, for that matter, as I believe this can be done in all OO languages).
So why is this done? Is it security? Properties?
If you have multiple constructors, you might want to initialize a field to different values
When you initialize the field in the constructor, there can be no confusion over when exactly it is initialized in regard to the rest of the constructor. This may seem trivial with a single class, but not so much when you have an inheritance hierarchy with constructor code running at each level and accessing superclass fields.