2
주어진 다음의 클래스 계층 구조 :는 공분산, contravariance 및 제거 불필요한 유형의 매개 변수
void Create<TD>(string description)
where TD : D
{
var instance = Activator.CreateInstance<TD>();
}
그러나 컴파일러 :
abstract class A { }
abstract class B { }
abstract class C { }
abstract class D<TA, TB, TC>
where TA : A
where TB : B
where TC : C { }
class E : A { }
class F : B { }
class G : C { }
class H : D<E, F, G> { }
내가 유형 D
의 개체를 인스턴스화하는 간단한 일반적인 방법을 만들려면 따라서 D
에 대한 유형 매개 변수를 지정해야하므로 다음을 작성해야합니다.
void Create<TD, TA, TB, TC>(string description)
where TA : A
where TB : B
where TC : C
where TD : D<TA, TB, TC>
{
var instance = Activator.CreateInstance<D>();
}
대신
Create<H>("foo");
을 쓸 수 있다는 내가 가진 내 질문은
Create<H, E, F, G>("foo");
를 작성하는 것을 의미
: 나는 구체적인 인스턴스로 H
를 지정하고 있습니다 때문에, 왜 컴파일러가 필요합니까 메소드 서명의 기본 클래스 D
에 대한 추가 유형 매개 변수는 무엇입니까? 왜 그들은 단지 H
에서 그 사람들을 추론 할 수 없습니까?
"TL : List"는 "TL"이 일부 닫힌'List <>'인 것을 말할 수 있다고 기대하겠습니까? – AakashM