有一个类,让我们说:
TListEx<T: TBaseClass> = class ...
....
procedure Sort;
....
end;
并且有一些事件 TNotifyEvent 您需要在其中调用此排序:
procedure TMyForm.ListEvent(Sender: TObject);
begin
....
(Sender as ??????).Sort;
end;
问题:应该写什么而不是“?????” ?如果我在那里写,那么当我用( )TListEx<TBaseClass>调用方法时,我仍然会收到类型不匹配错误“无效的类类型转换”。Sender = TListEx<TExtClass>TExtClass = class(TBaseClass)
但是方法还是通用的吗?如何解决这个麻烦?
更准确地说,目前我决定它是,但为了可靠性TListEx<TBaseClass>(Sender).Sort,我仍然想完成它。as
据我了解,我们有以下内容。
课程选项:
列出通用类:
和一个接受参数的方法——一个列表:
测试方法调用:
使用泛型时,编译器会为每个参数创建自己的类。结果,我们得到了 2 个完全独立的类
TListEx<TBaseClass>,并且TListEx<TExtClass>没有共同的祖先。这里只继承参数类,不能进行类型转换。您可以注入一个列表基类
并从中继承一个类型列表。然后,在转换类型时,不需要知道参数
T: