2010-04-29 3 views
12

나는 MvcContrib 그리드에 대한 소스 코드를 찾고 있어요와 클래스로 선언 참조 :클래스 선언에서 키워드 "where"는 무엇을합니까?

public class Grid<T> : IGrid<T> where T : class 

where T : class 비트가 무엇입니까?

+2

가능한 복제본 http://stackoverflow.com/questions/221687/can-you-use-where-toquire-an-attribute-in-c –

+2

@Jon Seigel - 분명히 그 질문의 중복이 아닙니다. – Oded

답변

19

generic type constraint입니다.

이 경우 제네릭 형식 (T)은 참조 형식, 즉 클래스, 인터페이스, 대리인 또는 배열 형식이어야 함을 의미합니다.

기타 제약 조건은 here입니다.

또한 특정 유형 (기본 클래스 또는 인터페이스)

+3

아니요, Object에서 파생되는 것과 아무런 관련이 없습니다. 예를 들어 인터페이스 또는 대리자 일 수 있습니다. – Gabe

+0

@Gabe - 수정 해 주셔서 감사합니다. 답변이 업데이트되었습니다. – Oded

2

또 다른 예는 AnInterface는 인터페이스 클래스이다

public A<T> where T : AnInterface 

될 것이다. 즉, T이이 인터페이스를 구현해야한다는 것을 의미합니다.

이러한 제한 조건은 컴파일러가 유형에 유효한 연산을 알 수 있도록하는 데 중요합니다. 예를 들어 어떤 함수가 어떤 함수를 제공하는지 컴파일러에 알리지 않고 T의 함수를 호출 할 수 없습니다.

2

T는 클래스 또는 인터페이스이지만 열거 형 또는 구조체가 될 수 없다는 형식 인수에 대한 제한 조건입니다. 따라서 T는 값 유형이 아닌 참조 유형이어야합니다.

최고 감사합니다,
올리버 Hanappi

1
당신이 Constraints on Type Parameters

예로 불리는 클라이언트 코드가이 클래스의 인스턴스를 형식 인수에 사용할 수있는 유형의 종류에 제한을 적용 할 수 있습니다

: T : 클래스

여기에서 T은 유형입니다. 유형 인수는 참조 유형이어야합니다. 이것은 모든 클래스, 인터페이스, 델리게이트 또는 배열 유형에도 적용됩니다.

1

제네릭 형식 제약 조건입니다. 유형 T이 참조 유형 (예 : 구조가 아닌 클래스)이어야한다는 것을 지정합니다.

관련 문제