Declare the generic class.

   
 

public class GenericList<T>
{
    void Add(T input) { }
}
class TestGenericList
{
    private class ExampleClass { }
    static void Main()
    {
        // Declare a list of type int.
        GenericList<int> list1 = new GenericList<int>();

        // Declare a list of type string.
        GenericList<string> list2 = new GenericList<string>();

        // Declare a list of type ExampleClass.
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
    }
}

   
     


Overriding a virtual method in a generic class


   


using System;

class MyBaseGenericClass<T> {
  protected T myObject;

  public MyBaseGenericClass(T o) {
    myObject = o;
  }

  public virtual T getmyObject() {
    Console.Write("Base&#039;s getmyObject(): " );
    return myObject;
  }
}

class MyGenericClass<T> : MyBaseGenericClass<T> {

  public MyGenericClass(T o) : base(o) {  }

  public override T getmyObject() {
    Console.Write("overide getmyObject(): ");
    return myObject;
  }
}

class Test {
  public static void Main() {
    MyBaseGenericClass<int> myObject = new MyBaseGenericClass<int>(8);

    Console.WriteLine(myObject.getmyObject());

    myObject = new MyGenericClass<int>(9);

    Console.WriteLine(myObject.getmyObject());
  }
}
           
          


A non-generic class can be the base class of a generic derived class


   


using System;

class MyBaseClass {
  int num;

  public MyBaseClass(int i) {
    num = i;
  }

  public int getnum() {
    return num;
  }
}

class MyGenericClass<T> : MyBaseClass {
  T ob;

  public MyGenericClass(T o, int i) : base (i) {
    ob = o;
  }

  public T getob() {
    return ob;
  }
}

class HierDemo3 {
  public static void Main() {

    MyGenericClass<String> w = new MyGenericClass<String>("Hello", 7);

    Console.WriteLine(w.getob());
    Console.WriteLine(w.getnum());
  }
}
           
          


A derived class with its own type parameters


   


using System;

class MyClass<T> {
  T ob;

  public MyClass(T o) {
    ob = o;
  }

  public T getob() {
    return ob;
  }
}

class ClassA<T, V> : MyClass<T> {
  V ob2;

  public ClassA(T o, V o2) : base(o) {
    ob2 = o2;
  }

  public V getob2() {
    return ob2;
  }
}

class Test {
  public static void Main() {
    ClassA<string, int> x = new ClassA<string, int>("Value is: ", 9);

    Console.Write(x.getob());
    Console.WriteLine(x.getob2());
  }
}