作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在考虑一个场景,我想要一个通用类,它在其项目上调用 Free
IF 这些都是对象类型。所以我尝试了以下方法:
if (PTypeInfo (TypeInfo (T)).Kind = tkClass) then
begin
RttiType := RttiContext.GetType (TypeInfo (T));
FreeMethod := RttiType.GetMethod ('Free');
if (FreeMethod <> nil) then
FreeMethod.Invoke (FInstance, []);
end;
不幸的是,最后一行没有编译,这并不奇怪,因为类型不匹配。问题是:我可以编译它吗?我尝试转换为 Pointer
,然后转换为 TObject
,但这给了我无效的类型转换错误。有什么方法可以将 FInstance : T
放入一个 TObject
引用中,然后我可以将其传递给 Invoke
?
或者有没有其他方法可以实现我想要的?请注意,重点是获取此类中的所有内容,因此我不想创建一个仅获取对象的 TObjectMyClass
。
感谢您的帮助。
最佳答案
这还不够吗?
if PTypeInfo(TypeInfo(T))^.Kind = tkClass then
TObject(FInstance).Free;
关于delphi - 将泛型类型的成员强制转换为 TObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5075354/
我是一名优秀的程序员,十分优秀!