C #에서 무엇을 where T : class
의미합니까?
즉.
public IList<T> DoThis<T>() where T : class
답변
간단히 말해서 이것은 일반 매개 변수를 클래스 (또는 클래스, 인터페이스, 대리자 또는 배열 유형 일 수있는 참조 유형)로 제한합니다.
자세한 내용은이 MSDN 기사 를 참조 하십시오.
답변
그것은이다 제네릭 형식 제약 조건 . 이 경우 제네릭 형식 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 페이지 또는 일반 매개 변수 제약 조건을 확인하십시오 .
답변
이것은 참조 유형으로 제한 T
됩니다 . 값 유형 ( s 및 기본 유형 제외 ) 을 넣을 수 없습니다 .struct
string
답변
그것은 T
일반 메소드가 사용될 때 사용되는 유형 이 클래스 여야 함을 의미합니다. 즉, int
또는double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
답변
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
}
답변
이를 유형 매개 변수 제한 조건이라고합니다. 사실상 그것은 유형 T가 될 수있는 것을 제한합니다.
형식 인수는 참조 형식이어야합니다. 이것은 모든 클래스, 인터페이스, 대리자 또는 배열 유형에도 적용됩니다.