Declare the generic class.

image_pdfimage_print
   
 

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

image_pdfimage_print


   


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

image_pdfimage_print


   


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

image_pdfimage_print


   


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());
  }
}
           
          


Template Method Pattern

image_pdfimage_print
   
 

using System;
public abstract class Calculate {
    public abstract void PositionLabel();

    public void SetupCalculate() {
        this.PositionLabel();
    }

    public Calculate() {}
}

public class CalculateDeluxe : Calculate {

    public override void PositionLabel() {
        Console.WriteLine("Deluxe clock");
    }
    public CalculateDeluxe() { ;}
}

public class CalculateStandard : Calculate {
    public override void PositionLabel() {}

    public CalculateStandard() {}
}
class Client {
    static void Main(string[] args) {
        Calculate delCalculate = new CalculateDeluxe();
        delCalculate.SetupCalculate();
        Calculate stdCalculate = new CalculateStandard();
        stdCalculate.SetupCalculate();
    }
}

    


Strategy Pattern Demo

image_pdfimage_print
   
 

using System;
public abstract class Strategy {
    public abstract void CreditBusinessRule();
    public Strategy() { ;}
}

public class AStrategy : Strategy {
    public override void CreditBusinessRule() {
        Console.WriteLine("A");
    }

    public AStrategy() { ;}
}

public class BStrategy : Strategy {
    public override void CreditBusinessRule() {
        Console.WriteLine("Manager");
    }

    public BStrategy() { }
}

public class MyContext {
    Strategy aStrategy;

    public MyContext(Strategy crStrategy) {
        this.aStrategy = crStrategy;
    }

    public void BusinessRule() {
        this.aStrategy.CreditBusinessRule();
    }
}

class Client {
    static void Main(string[] args) {
        MyContext cr = new MyContext(new AStrategy());
        cr.BusinessRule();
    }
}