private Object object1;
Does object1 call the default constructor of Object even though it haven't used = new Object();
?
If not, is object1 NULL until it is initialized with new
?
No, that field declaration just declares a field. It will have a default value of null
.
From section 5.2 of the C# 5 specification:
The following categories of variables are automatically initialized to their default values:
- Static variables.
- Instance variables of class instances.
- Array elements.
The default value of a variable depends on the type of the variable and is determined as follows:
- For a variable of a value-type, the default value is the same as the value computed by the value-type's default constructor (ยง4.1.2).
- For a variable of a reference-type, the default value is null.
Initialization to default values is typically done by having the memory manager or garbage collector initialize memory to all-bits-zero before it is allocated for use. For this reason, it is convenient to use all-bits-zero to represent the null reference.
If you want it to start off with a value other than null, you need to initialize it explicitly:
private Object object1 = new Object();
See more on this question at Stackoverflow