delphi – 如何继承通用虚方法?
我有以下代码.我想覆盖基础列表的Notify方法,以便能够在修改列表时创建一个事件.
TDescendantList = class(TObjectList<TSomeclass>) private <...> protected procedure Notify(const Value: T; Action: TCollectionNotification); override; <...> end; 如果我把Value:T我在T上得到一个“未声明的标识符”. 如果是价值:TSomeClass我得到的“通知声明”与以前的声明不同“. Notify是TObjectList< T:class>的受保护方法.此方法不会出现在XE2 IDE的重写列表中. 这是实现这个的一些方法,或者我需要使用另一种方法,因为这是一个众所周知的砖墙? 解决方法
如果您的后代类正在修复泛型类型,那么您必须使用该固定类型来代替T.在您的情况下:
protected procedure Notify(const Value: TSomeclass; Action: TCollectionNotification); override; 是声明此函数的正确方法. 错误 :
令人遗憾的是Delphi RTL在不同单元中复制类型名称的情况. System.Classes单位定义 TCollectionNotification = (cnAdded,cnExtracting,cnDeleting); 和System.Generics.Collections定义 TCollectionNotification = (cnAdded,cnRemoved,cnExtracted); 几乎可以肯定,在uses子句中的Classes之前声明了Generics.Collections,并且编译器正在解析不需要的TCollectionNotification版本. 要修复它,请重新组织您的uses子句,以便Generics.Collections位于Classes之后或使用完全限定的类型名称,即: procedure Notify(const Value: TSomeClass; Action: Generics.Collections.TCollectionNotification); override; 与以前的声明错误不同的课程是有条不紊地检查您的类型. Ctrl CLICK类型标识符将带您进入编译器正在使用的类型的定义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |