using System; class MyBase { public void hello() { Console.WriteLine("Hello"); } } class B : MyBase { } class C { } class Test<T> where T : MyBase { T obj; public Test(T o) { obj = o; } public void sayHello() { obj.hello(); } } class BaseClassConstraintDemo { public static void Main() { MyBase a = new MyBase(); B b = new B(); C c = new C(); Test<MyBase> t1 = new Test<MyBase>(a); t1.sayHello(); Test<B> t2 = new Test<B>(b); t2.sayHello(); // The following is invalid because // C does not inherit MyBase. // Test<C> t3 = new Test<C>(c); // Error! } }