Se pune urmatorul cod in
LINQPad:
void Main() {
Derived d = new Derived();
}
class Base {
public Base() {
Console.WriteLine( "Base.Instance.Constructor" );
this.m_Field3 = new Tracker( "Base.Instance.Field3 (in instance constructor)" );
this.Virtual();
}
static Base() {
Console.WriteLine( "Base.Static.Constructor" );
}
virtual public void Virtual() {
Console.WriteLine( "Base.Instance.Virtual" );
}
private Tracker m_Field1 = new Tracker( "Base.Instance.Field1" );
private Tracker m_Field2 = new Tracker( "Base.Instance.Field2" );
private Tracker m_Field3;
static private Tracker s_Field1 = new Tracker( "Base.Static.Field1" );
static private Tracker s_Field2 = new Tracker( "Base.Static.Field2" );
}
class Derived : Base {
public Derived() {
Console.WriteLine( "Derived.Instance.Constructor" );
this.m_Field3 = new Tracker( "Derived.Instance.Field3 (in instance constructor)" );
}
static Derived() {
Console.WriteLine( "Derived.Static.Constructor" );
}
override public void Virtual() {
Console.WriteLine( "Derived.Instance.Virtual" );
}
private Tracker m_Field1 = new Tracker( "Derived.Instance.Field1" );
private Tracker m_Field2 = new Tracker( "Derived.Instance.Field2" );
private Tracker m_Field3;
static private Tracker s_Field1 = new Tracker( "Derived.Static.Field1" );
static private Tracker s_Field2 = new Tracker( "Derived.Static.Field2" );
}
class Tracker {
public Tracker( string text ) {
Console.WriteLine( text );
}
}
se apasa F5 si apoi se admira rezultatul:
Derived.Static.Field1
Derived.Static.Field2
Derived.Static.Constructor
Derived.Instance.Field1
Derived.Instance.Field2
Base.Static.Field1
Base.Static.Field2
Base.Static.Constructor
Base.Instance.Field1
Base.Instance.Field2
Base.Instance.Constructor
Base.Instance.Field3 (in instance constructor)
Derived.Instance.Virtual
Derived.Instance.Constructor
Derived.Instance.Field3 (in instance constructor)
Concluzia? membrii claselor se initializeaza in ordinea urmatoare:
- membrii statici initializati la declarare
- constructorul static
- membrii de instanta initializati la declarare
- clasa de baza
- constructorul