만약 내가 틀렸다면, 당신이 '012 : T : baseClass'를 T
의 기본값 인 것처럼 baseClass
인 것처럼 받아 들일 것입니다. 그래서,이 경우가 아니라면
, 전문화 where T : baseClass
는 유형이 T
baseClass
또는 baseClass
로부터 유도 될 (또는 대신 클래스 인터페이스 구현된다면)해야한다는 것을 의미한다. 당신이 있다면
따라서, :
public class GenericClass<T> where T : baseClass
{
}
을 다음 당신은 말할 수 :
var x = new GenericClass<baseClass>();
또는
var y = new GenericClass<SomethignDerivedFromBaseClass>();
그러나 당신이 말할 수 :
var z = new GenericClass<int>();
int
은 baseClass
을 상속하지 않으므로 실제로 GenericClass<T>
내에서 코드 줄을 호출 한 경우
실제로 위의 인스턴스에 T
를 사용하는 유일한 방법은 다음과 같습니다
public GenericClass<T> where T : baseClass
{
void SomeMethod()
{
GenericClass<T> genericInst = new GenericClass<T>();
}
}
또는 T는 이미 서브 것으로 알려져 또 다른 맥락에서
baseClass의 클래스. 당신이 궁금처럼
UPDATE 귀하의 의견을 바탕으로
들린다 당신이 가지고있는 경우 :
public class GenericClass<T> where T : baseClass
{
public List<T> Items { get; set; }
...
}
당신이 목록에없는 baseclass에서 파생 된 일을 추가 할 수 있는지 여부
과 대답 네 ~입니다. baseClass로부터 상속받은 T
에 대해 GenericClass<T>
클래스를 선언 할 수 있습니다. 그러나 List<T>
은 여전히 유형이 T
인 강하게 입력됩니다. 이 주어집니다
는 :
public class BaseClass { }
public class SubClass : BaseClass { }
GenericClass<BaseClass>
는 List<T>
T
이후는 BaseClass
될 것입니다 모두 BaseClass
및 SubClass
에서 개최 할 수있다.
그러나 GenericClass<SubClass>
는 List<T>
어디 T
만 SubClass
의 항목을 보유하거나 상속 할 수 따라서 SubClass
있을 것이다 것입니다.
위의 문맥에서 T를 어떤 문맥에서 사용하고 있습니까? –