Ниже представлен схематический порядок вызовов в приведённом коде:
Main();newBaz(); // Baz.ctor base.ctor(); // Bar.ctor base.ctor(); // Foo.ctorQuux(); // Будет вызван Bar.Quux(), // т.к. Quux() имеет перегрузку в дочернем классеConsole.WriteLine("Bar.Quux(), "+ name); // в name пока ничего не хранится name ="Bar"; name ="Baz";Quux(); // Будет вызван Bar.Quux(params object[] args), // т.к. в классе Bar есть подходящий методConsole.WriteLine("Bar.Quux(params object[])"); ((Foo)this).Quux(); // Будет вызван Bar.Quux(), // т.к. Quux() имеет перегрузку в дочернем классеConsole.WriteLine("Bar.Quux(), "+ name); // name == "Baz"