3
변수 클래스가 확장 클래스이기도 한 제네릭 클래스 내에서 확장을 호출하는 방법이 있습니까? 다음은 샘플 코드입니다. 컴파일되지 않습니다. 하지만,제네릭 클래스 내부에서 확장 메서드를 호출 할 수 있습니까?
public class GenericFoo<TFrom, TTo>
where TFrom : MyExtendedType
where TTo : MyType
{
public TTo SomeMethod(TFrom A)
{
return (TTo)A.Bar();
}
}
이 그것을 컴파일에 도착하기에 충분합니다
이'TFrom' does not contain a definition for 'Bar' and the best extension method overload 'MyNamespace.Extensions.Bar(MyNamespace.MyExtendedType)' has some invalid arguments
좋아, 패배의 종류 첫번째 장소에있는 제네릭 클래스의 목적. 그러나 정확한 것 같습니다. –
@ArturoHernandez 매개 변수가 실제로 'MyExtendedType'이라는 것을 모른 채 어떻게'Bar '를 호출 할 수있을 것으로 예상합니까? Generics를 사용하면 하나 이상의 유형이있는 동작 패턴을 컴파일 타임에 정확히 알지 못하는 상태에서 만들 수 있지만 패턴을 설정하기 위해 이러한 유형을 사용하여 수행 할 수있는 작업을 알아야합니다. –
@ArturoHernandez 인터페이스'ISource'를 정의하고 Bar를'Bar (ISource source)'로 정의한 다음'TFrom : ISource'라는 제약 조건을 사용하는 것이 좋습니다. 그렇게하면 일반 클래스가 훨씬 더 다양한 유형 매개 변수와 호환 될 것입니다. –