// Override.cs: virtual and non-virtual non-static methods using System; class A { public virtual void m1() { Console.Out.WriteLine("A.m1()"); } public void m2() { Console.Out.WriteLine("A.m2()"); } } class B : A { public override void m1() { Console.Out.WriteLine("B.m1()"); } public new void m2() { Console.Out.WriteLine("B.m2()"); } } class Override { static void Main(string[] args) { B b = new B(); A a = b; a.m1(); // B.m1() b.m1(); // B.m1() a.m2(); // A.m2() b.m2(); // B.m2() } }