using System.Collections.Generic;
public static void Main()
BaseClass baseInstance = new BaseClass();
DerivedClass derivedInstance = new DerivedClass();
BaseClass baseContainer = derivedInstance;
Console.WriteLine("baseInstance foo");
Console.WriteLine("derivedInstance foo");
Console.WriteLine("baseContainer foo");
public virtual void foo()
Console.WriteLine("BaseClass foo");
Console.WriteLine(" Calling bar");
Console.WriteLine(" Calling baz");
public virtual void bar()
Console.WriteLine(" BaseClass bar");
public virtual void baz()
Console.WriteLine(" BaseClass baz");
public class DerivedClass : BaseClass
Console.WriteLine("DerivedClass foo");
Console.WriteLine(" Calling BaseClass foo");
public override void bar()
Console.WriteLine(" DerivedClass bar");
Console.WriteLine(" DerivedClass baz");