Select Page

You can declare a class with a generic type so that you can later instantiate it specifying the type at that point.

public abstract class genericListClass<t>
{
  protected virtual add(T value)
  {
    ...
  }
}

You can then instantiate a GenericListClass for different type as follows;

 genericListClass<int> integerList = new genericListClass<int>()
 genericListClass<long> LongList = new genericListClass<long>()
 genericListClass<string> stringList = new genericListClass<string>()

You can also accept different generic types as parameters to methods in a generic class

public abstract class genericClass<t>
{
 protected virtual CheckBoxOption[] WrapCheckBoxOptions<u>(string id, 
                   IEnumerable<checkboxoption> options)
 {
   ...
 }
}

The use of the <u> is to ensure it is taken as different from the type reperesented by <t>. <u> is a new different type.
In addition to this you can constrain the type of the class to a specific interface or behaviour;

public abstract class genericListClass<t>
{
 protected virtual CheckBoxOption[] WrapCheckBoxOptions<u>(string id,
                       IEnumerable<checkboxoption> options) where U : new()
 {
 }
}

This allows you to constrain the type <U> to a specific type or more usefully, Interface. You can also use it, as in this case,

where U : new()

to constrain the type to one that can be instantiated with a default constructor. In other words it does not require parameters to be passed to the constructor. So

 U newInstance = new U();

will not raise an error.

%d bloggers like this: