- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码。我想重写基础列表的 Notify 方法,以便能够在列表的修改上创建事件。
TDescendantList = class(TObjectList<TSomeclass>)
private
<...>
protected
procedure Notify(const Value: T;
Action: TCollectionNotification); override;
<...>
end;
如果我输入 Value: T
我在 T 上收到“未声明的标识符”。
如果是 Value: TSomeClass
我收到“‘通知’声明与之前的声明不同”。
Notify
是 TObjectList<T: class>
的 protected 方法。该方法不会出现在 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
子句中 before 声明了 Generics.Collections
,并且编译器正在解析不需要的 TCollectionNotification
版本。
要修复此问题,请重新组织 uses
子句,使 Generics.Collections
位于 Classes
或 use 之后完全限定的类型名称,即:
procedure Notify(const Value: TSomeClass;
Action: Generics.Collections.TCollectionNotification); override;
<小时/>
与之前的声明错误不同
的教训是有条不紊地检查您的类型。类型标识符上的 Ctrl+CLICK 将带您到编译器正在使用的类型的定义。
关于delphi - 如何继承泛型虚方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37308109/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!