public class MyGenericClass where T:IComparable { } class MyClass where T : class where U : struct { } public class MyGenericClass where T : IComparable, new() { // The following line is not possible without new() constraint: T item = new T(); } interface IMyInterface { } class Dictionary where TKey : IComparable, IEnumerable where TVal : IMyInterface { public void Add(TKey key, TVal val) { } } class List { void Add(List items) where U: T { /*...*/ } void Add(List items) where U : T { /*...*/ } } extern T GetNodeFromGuid(Guid guid) where T : INode; extern T GetNodeFromGuid(Guid guid) where T: INode;