1

如何将TypeIdenitifier转换为类类型?我需要使用隐式转换。泛型TypeIdenitifier转换。如何?

type 
    TMyChildArray<T>=class(TMyArray<T>) 
    private 
     FData:Array of T; 
     procedure AddEnd(); 
    end; 

    TTypeIdenitifierParentClass=class(TAnotherParentClass) 
    protected 
     TestField:Cardinal; 
    end; 


    procedure TMyChildArray<T>.AddEnd(); 
    var elem:T; 
    begin 
    for elem in Fdata do 
     TTypeIdenitifierParentClass(elem).TestField:=0; 
    end; 

我上隐式转换的交互 “无效类型转换”, “TTypeIdenitifierParentClass(ELEM).TestField:= 0;”。

我想要使用的原理是TypeIdenitifier将表示一个从TTypeIdenitifierParentClass继承而来的类。有很多类类型,但是它们全部都属于这个类。

我该怎么做?

回答

2

德尔福原因是抱怨投是因为编译器没有办法知道如果T的类型可以是铸造为“TTypeIdenitifierParentClass”的方式。你需要与T限制类由“TTypeIdenitifierParentClass”

降尝试以下

type 
    TTypeIdenitifierParentClass=class(TAnotherParentClass) 
    protected 
     TestField:Cardinal; 
    end; 

    TMyChildArray<T: TTypeIdenitifierParentClass>=class(TMyArray<T>) 
    private 
     FData:Array of T; 
     procedure AddEnd(); 
    end; 

    procedure TMyChildArray<T>.AddEnd(); 
    var elem:T; 
    begin 
    for elem in Fdata do 
     elem.TestField:=0; 
    end; 
+0

正是我所做的! :) – 2010-04-18 12:44:51