Generic C# Tutorial

Because of the base class constraint, all type arguments passed to Test must have A as a base class.

using System; 
 
class A { 
  public void hello() { 
    Console.WriteLine("Hello"); 
  } 

 
class B : A { } 
 
class C { } 
 
class Test where T : A { 
  T obj; 
 
  public Test(T o) { 
    obj = o; 
  } 
 
  public void sayHello() { 
    obj.hello(); 
  } 

 
class MainClass { 
  public static void Main() { 
    A a = new A(); 
    B b = new B(); 
    C c = new C(); 
 
    Test t1 = new Test(a); 
 
    t1.sayHello(); 
 
    Test t2 = new Test(b); 
 
    t2.sayHello(); 
 
    // The following is invalid because 
    // C does not inherit A. 
//    Test t3 = new Test(c); // Error! 
  } 
}
Hello
Hello