加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何继承通用虚方法?

发布时间:2020-12-15 04:23:46 所属栏目:大数据 来源:网络整理
导读:我有以下代码.我想覆盖基础列表的Notify方法,以便能够在修改列表时创建一个事件. TDescendantList = class(TObjectListTSomeclass) private ... protected procedure Notify(const Value: T; Action: TCollectionNotification); override; ... end; 如果我把
我有以下代码.我想覆盖基础列表的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;

是声明此函数的正确方法.

错误 :

Declaration of ‘Notify’ differs from previous declaration

令人遗憾的是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类型标识符将带您进入编译器正在使用的类型的定义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读