2014-02-14 1 views
-2

내가 컴파일 오류를 받고 있어요 컴파일이제네릭 상속 오류

유형 'WpfApplication2.CommandInstrumentTrade'는 제네릭 형식 또는 메서드 '의 형식 매개 변수'T '로 사용할 수 없습니다

WpfApplication2.GenericWindowBase '. 'WpfApplication2.CommandInstrumentTrade'에서까지 'WpfApplication2.GenericCommandBase'

public interface IBaseClass 
{ 
    int ID { get; set; } 
} 

public class BaseClass : IBaseClass 
{ 
    public int ID { get; set; } 
} 

public class DerivedClass : BaseClass 
{ 
} 

public class Command 
{ 
} 

public class GenericCommandBase<T> : Command where T : IBaseClass 
{ 
} 

public class DerivedGenericCommand : GenericCommandBase<DerivedClass> 
{ 
} 

public class GenericWindowBase<T> where T : GenericCommandBase<IBaseClass> 
{ 
} 

public class DerivedGenericWindow : GenericWindowBase<DerivedGenericCommand> // this line fails 
{ 

} 
+0

오류가 샘플 코드와 일치하지 않습니다. 이 오류는'GenericWindowBase '를 사용하고 있는데,'CommandInstrumentTrade'가'GenericWindowBase'의 where 조건을 만족하지 못하기 때문에 실패합니다. – Peter

+2

상속은 제네릭으로 구성되지 않습니다. 'Base'와'Derived'가 상속 관계를 가지고 있다고해서 그것이'Generic '과'Generic '이되는 것을 의미하지는 않습니다. –

+0

@Damien_The_ 네가 맞습니까?하지만 이것에 대한 해결책이 있습니까? –

답변

1

문제는 Generic<Derived>이 조건 where T : Generic<Base>을 만족하지 않는다는 것입니다 암시 적 참조 변환이 없습니다. DerivedBase에서 파생하더라도 Generic<Base>

에 유래에서 같은 많은 질문이 있습니다에서 Generic<Derived>는 도출하지 않습니다. 사람들을 읽어보십시오 :

  1. C# Generics Inheritance
  2. generic inheritance in C#?

상속은 제네릭 구성하지 않습니다. 하나의 변환기에서 다른 변환기로 전환해야합니다. 어쩌면 덜 추상적 인 코드를 제시하면 도움을 줄 수 있습니다.