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;