저는 C#에서 제네릭으로 조금 어려움을 겪고 있습니다. 이 코드 조각을 고려해일반적인 derrived 유형의 객체를 반환하는 일반 메서드
public interface A {};
public interface B : A {};
public interface C : A {};
public interface IMyInterface<in T> where T : A {};
public class FirstImpl<T> : IMyInterface<T> where T : B {};
public class SecondImpl<T> : IMyInterface<T> where T : C {};
은 지금은 올바른 구현 형태를 취하고 반환 일부 공장에 필요
public IMyInterface<T> Create<T>() where T : A
{
if(typeof(T) is B) {
return new FirstImpl<T>();
}
if(typeof(T) is C) {
return new SecondImpl<T>();
}
}
이 두 가지 수준에서 작동하지 않습니다. 첫 번째는 return 유형입니다. 두 번째는 더 구체적인 유형이 필요하기 때문에 첫 번째 또는 두 번째 구현에 'T'를 전달할 수 없다는 것입니다. 어떤 생각이 어떻게 해결할 수 있습니까?
글쎄, 문제는 기술적으로 당신이'new FirstImpl();'을 호출 할 때 제네릭 타입 T가 실제로 B 또는 B 파생물이라는 것을 컴파일러에게 확신시킬 수 없다는 것입니다. 흥미 롭 군. 생각할 거리. Lemme 참조하십시오. –
'새로운 '키워드 몇 개를 남겨 두셨습니까? 질문을 이해하는 것만 큼 어렵습니다. 원하는 코드를 컴파일하더라도 컴파일하지 않아도됩니다. 당신은'return new FirstImpl();'과'return new SecondImpl ();'을 쓰려고 했습니까? –
이제 수정되었습니다. –