using System; class S{ public void Sop(){ Console.WriteLine("Sop"); } } class T:S{ public void Top(){ Console.WriteLine("Top"); } } class A { public void Op(S x){ x.Sop(); } } class B: A { public void Op(T x){ x.Top(); } } class Client{ public static void Main(){ A aref; B bref = new B(); S sref = new S(); aref = bref; // aref is of static type A and dynamic type B aref.Op(sref); // B.Op is called with an S-object as parameter. // What if an operation from T is activated on the S-object? } }