Specifying a Constraint for a Type Parameter

When you provide a type parameter to a generic class, you can only invoke methods in System.Object for objects of that type.
1
2
3
4
5
6
7
public class Dog<TFavThing>
{
    public void BuryThing(TFavThing thing)
    {
        // Err: TFavThing does not contain a definition for Bury
        thing.Bury();
    }
You can allow calling methods in a specific type by adding a constraint to the type parameter, indicating what type the parameter must conform to.  Adding a constraint lets you do two things:
  • Ensure that a type parameter belongs to a specific type
  • Allow you to call methods in a specific type, for objects whose type matches the type parameter
A constraint consists of a type parameter name following by an indication of the type that it must be.  (Generally a base class or an interface).


1
2
// TFavThing type parameter must be a type that implements IBuryable
public class Dog<TFavThing> where TFavThing: IBuryable