#547 – Things That Can Serve as Type Parameter Constraints
March 26, 2012 1 Comment
A constraint on a type parameter is often a base class or interface, but can actually take on a number of different forms.
A constraint can be a class type:
// Type parameter can be some subclass of DogToy, // e.g. SqueakyToy, RopeToy public class Dog where TFavThing: DogToy
Or an interface type:
public class Dog where TFavThing: IBuryable
Or another type parameter:
// TFavThing must implement IBuryable // TOtherThing must be castable to TFavThing's type public class Dog<TFavThing,TOtherThing> where TFavThing: IBuryable where TOtherThing: TFavThing
class indicates that the type must be a reference type.
public class Dog<TFavThing> where TFavThing: class
struct indicates that the type must be a non-nullable value type.
public class Dog<TFavThing> where TFavThing: struct
new() indicates that the type must have a public parameterless constructor defined.
public class Dog<TFavThing> where TFavThing: new()
Pingback: #1,141 – Reference Equality Used Even when Overload Available for Typed Parameter | 2,000 Things You Should Know About C#