2014-10-24 4 views
-1
내가 다른 일반 클래스에서 상속 일반적인 클래스 TB를 구현하려는

에서 제네릭 클래스를 상속, TA는델파이 다른 제네릭 클래스

base = class(Tobject) 
public 
procedure test1(x : integer); virtual; 
end; 


generic TA<T>= class (base) 
public 
procedure test1(x : T); overload; 
end; 

generic TB< T, Y >= class (TA<T>) 
public 
procedure test1(addParameter1 : T ; addParameter2 : Y); overload; 
end; 

아래와 같이 그러나 그것은 작동하지 않습니다! 어떻게 내가 그걸 할 수 있는지 어떤 생각.

+3

'T'는'base'에 정의되어 있지 않고'generic'은 키워드가 아닙니다. –

+4

"작동하지 않습니다"는별로 도움이되지 않습니다. 달성하기를 원하는 것은 무엇입니까? 컴파일러 오류를 수정하기는 쉽지만 코드는 아무 것도 유용하지 않습니다. 나는 당신이 디자인 문제로 크게 어려움을 겪고 있다고 느낍니다. ** 해결책 **보다는 ** 문제 **에 대해 물어 보면 당신이 여기서 가장 계몽을 얻을 것이라고 믿습니다. –

답변

1

당신은 올바른 길을 가고 있습니다 만, 일반적인 매개 변수를 사용하지 않고 일반 매개 변수로 Base 클래스를 정의 할 수 없습니다 (test1 프로 시저에 대한 매개 변수는이 컨텍스트에서 알 수없는 "T"유형입니다). 이후 변경되었습니다 - 수정 수정 참조). 클래스는 자체 포함 100 %이어야하며 모든 하위 클래스에 의존하지 않고 구문 적으로 구문 분석되고 구성 될 수 있어야합니다.

따라서 Base를 제네릭 클래스로 만들거나 T 유형의 의존 관계를 제거해야합니다.

"일반"단어를 삭제하는 경우 코드가 컴파일되어야하며 Delphi에는 해당 키워드가 없으므로 전체 코드 스 니펫에 "유형"이 붙습니다.

+0

코드 컴파일은 간단합니다. 하지만 그 다음엔? 비 제너릭 기본 클래스의 가상 함수는 무엇을 사용합니까? 그 문제를 해결할 수 있습니까? –