답변:
그것은이다 제네릭 형식 제약 조건 . 이 경우 제네릭 형식 T
은 참조 형식 (클래스, 인터페이스, 대리자 또는 배열 형식)이어야합니다.
의 유형 제약 조건 T
이므로 클래스 여야합니다.
이 where
절은 다음과 같은 다른 유형 제약 조건을 지정하는 데 사용할 수 있습니다.
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
자세한 내용은 where
조항 의 MSDN 페이지 또는 일반 매개 변수 제약 조건을 확인하십시오 .
where T : class, IComparable, new()
where T: class
말 그대로 그 의미합니다 T has to be a class
. 모든 참조 유형이 될 수 있습니다. 이제 코드가 DoThis<T>()
메소드를 호출 할 때마다 T 를 대체 할 클래스를 제공해야합니다 . 예를 들어 DoThis<T>()
메소드를 호출하려면 다음과 같이 호출해야합니다.
DoThis<MyClass>();
당신의 방법이 다음과 같다면 :
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
그런 다음 메서드에 T가 나타나면 MyClass로 바뀝니다. 따라서 컴파일러가 호출하는 최종 메소드는 다음과 같습니다.
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
에서는 사용할 수 없습니다 where T : class
. 당신이 where T: new()
그것을 할 수 있도록 지정 해야합니다.
이를 유형 매개 변수 제한 조건이라고합니다. 사실상 그것은 유형 T가 될 수있는 것을 제한합니다.
형식 인수는 참조 형식이어야합니다. 이것은 모든 클래스, 인터페이스, 대리자 또는 배열 유형에도 적용됩니다.