Initialize Objects Properly: Listing 2: C#, Examine the Initialization Order
This sample shows you the initialization order for a hierarchy of objects. You can see the relationships between the field initializers and the execution of the body of constructors.
public class BaseTrackType
{
private static Marker staticInit =
new Marker("base static - initializer1");
private static Marker staticInit2 =
new Marker("base static - initializer2");
private static Marker staticCtor;
static BaseTrackType()
{
staticCtor =
new Marker("base static - ctor");
}
private Marker fieldInit =
new Marker("base instance - initializer");
private Marker fieldInit2 =
new Marker("base instance - initializer2");
private Marker ctorInit;
public BaseTrackType()
{
ctorInit = new Marker("base instance - ctor");
}
}
public class DerivedTrackType : BaseTrackType
{
private static Marker static1Derived = new (Marker
"derived static - initializer");
private static Marker staticCtorDerived;
static DerivedTrackType()
{
staticCtorDerived = new Marker("derived static - Ctor");
}
private Marker derivedInit = new Marker(
"derived instance - Initializer");
private Marker derivedCtor;
public DerivedTrackType()
{
derivedCtor = new Marker("derived instance - Ctor");
}
}