public static void Main()
Console.WriteLine("new BaseOuter");
var baseOuter = new BaseOuter();
Console.WriteLine("\nnew DerivedOuter");
var derivedOuter = new DerivedOuter();
protected BaseInner baseInner;
Console.WriteLine("BaseOuter Constructor");
protected virtual void InitializeInner(){
Console.WriteLine(" BaseOuter Initialize BaseInner");
baseInner = new BaseInner();
protected class BaseInner{
Console.WriteLine(" BaseInner Constructor");
class DerivedOuter : BaseOuter {
Console.WriteLine("DerivedOuter Constructor (finished)");
protected override void InitializeInner(){
Console.WriteLine(" DerivedOuter Initialize DerivedInner");
baseInner = new DerivedInner();
protected class DerivedInner : BaseInner {
Console.WriteLine(" DerivedInner Constructor");