나는 또 다른 유형의 하위이 될 수있는 형식 매개 변수를 강제하는 방법을 알고 다른 타입의?구속 유형 매개 변수는
public interface IMapping<T2>
{
public void IncludeMappingOf<T1>()
where T2 : T1; // <== doesn't work
}
...
var mapping = MapManager.Find<Truck>();
// Truck inherits Vehicle
// Would like compiler safety here:
mapping.IncludeMappingOf<Vehicle>();
mapping.Serialize(new TonkaTruck());
현재, 나는 IncludeMappingOf
내부 IsSubclassOf
를 사용하여 런타임에 T1 및 T2를 비교하는 데 문제가 있습니다. 컴파일에 안전한 솔루션이 바람직합니다. 어떤 아이디어?
편집 : 예를 덜 디자인 적으로 변경했습니다.
참고 : 참고 : 연결된 질문은 매우 유사하지만 적합한 대답은 제공되지 않습니다. 바라기를이 질문은 저것에 또한 어떤 빛을 비춰 줄 것이다.
EDIT # 2 :
간단한 예 :
public class Holder<T2>
{
public T2 Data { get; set; }
public void AddDataTo<T1>(ICollection<T1> coll)
//where T2 : T1 // <== doesn't work
{
coll.Add(Data); // error
}
}
...
var holder = new Holder<Truck> { Data = new TonkaTruck() };
var list = new List<Vehicle>();
holder.AddDataTo(list);
컴파일러 : 인수 유형 'T2'는 타입 'T1'을 파라미터에 할당 아니다. 예, 필자는 T2가 매개 변수 유형 T1에 할당 가능한 경우 만 허용하도록 컴파일러를 얻으려고합니다.
아주 흥미로운 질문이지만, 여기에 디자인 문제가있을 수 있다는 느낌을 떨칠 수 없는데 왜 '트럭 매핑'이 '맵핑'대신 'VehiculeMapping'을 상속하지 않는 것입니까? 나는 트럭 맵핑이 좀 더 일반적인 차량 맵핑의 특화된 버전인지 또는 뭔가 빠져있는 것처럼 들리는가요? –
강력하게 관련 (중복) : [C# 제네릭 메서드 형식 매개 변수를 "포함 할 수있는 클래스"형식 매개 변수로 제한 할 수 있습니까?] (http://stackoverflow.com/questions/11255558/is-it-possible -to-constrain-ac-sharp-generic-method-type-as-assignab) –
@ SimonRapilly : 아마도 맞을 것이다. 이것은 문제를 설명하는 데 도움이되는 고안된 예제입니다. 예제를 약간 변경했습니다. – CSJ