where

where은 제네릭 형식 제약 조건을 지정하는데 사용 된다.
조건은 다음과 같이 제한 한다.

Where T: 제약조건

MyGenericClass를 인스턴스로 만들때, IComparable를 상속한 클래스와 IComparable 클래스만 사용 할수 있습니다.  다른 클래스를 사용하면 빌드 할때 에러를 냅니다.

public class MyGenericClass<T> where T:IComparable { }

MyClass를 사용할때, 클래스를 사용할지, 구조체를 사용할지 지정도 할수 있습니다.

class MyClass<T, U>
    where T : class
    where U : struct
{ }

new 제약 조건은 제네릭 클래스로 인스턴스를 만들때  매개 변수가 없는 public 생성자를 갖도록 지정한다.

class ItemFactory<T> where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}


참고)
https://msdn.microsoft.com/ko-kr/library/bb384067.aspx

C# 프로그래밍 가이드
https://msdn.microsoft.com/ko-kr/library/67ef8sbd.aspx

new 제약 조건
https://msdn.microsoft.com/ko-kr/library/sd2w2ew5.aspx