class A { public virtual string Identity() { return "A.Identity(): " + ToString(); } public void print() { System.Console.WriteLine(Identity()); } } class B: A { override public string ToString() { return "B.ToString()"; } override public string Identity() { return "B.Identity(): " + base.ToString(); } } class test { public static void Main() { A a = new A(); a.print(); B b = new B(); b.print(); System.Console.WriteLine("{0}", ((A)b).Identity()); System.Console.WriteLine("{0}", b.Identity()); ((A)b).print(); } }