#1,031 – Requiring Generic Type Parameters to Implement an Interface
February 12, 2014 2 Comments
By default, when you specify a type parameter in a generic class, the type can be any .NET type. There are times, however, when you’d like to constrain the type in some ways, allowing only types that implement a particular interface.
You can constrain a type parameter to be of a type that implements a particular interface, using the where keyword. In the example below, the PileOf class has a type parameter that must be a type that implements the IBark interface. (The EverybodyBark method calls a method in IBark).
public class PileOf<T> where T : IBark { private List<T> thePile; public PileOf() { thePile = new List<T>(); } public void AddThing(T thing) { thePile.Add(thing); } public void EverybodyBark() { foreach (T creature in thePile) { creature.Bark(); } } }
We can now create a PileOf<Dog>, because Dog implements IBark, but we can’t create a PileOf<Cow>.