using System; public class Foo<T> where T : A { public void Test (T t) { Console.WriteLine (t); Console.WriteLine (t.GetType ()); t.Hello (); } } public class A { public void Hello () { Console.WriteLine ("Hello World"); } } public class B : A { } class X { public static void Main () { Foo<B> foo = new Foo<B> (); foo.Test (new B ()); } }