列出实现接口的类的所有属性

2023-12-09

我有一个带有接口的类:

TInterface = interface(IXMLNode)
  function Get_One: Boolean;
  function Get_Two: Boolean;
  function Get_Three: Boolean;
  procedure Set_One(Value: Boolean);
  procedure Set_Two(Value: Boolean);
  procedure Set_Three(Value: Boolean);
  property One: Boolean read Get_One write Set_One;
  property Two: Boolean read Get_Two write Set_Two;
  property Three: Boolean read Get_Three write Set_Three;
end;

TTesting = class(TXMLNode, TInterface)
protected
  function Get_One: Boolean;
  function Get_Two: Boolean;
  function Get_Three: Boolean;
  procedure Set_One(Value: Boolean);
  procedure Set_Two(Value: Boolean);
  procedure Set_Three(Value: Boolean);
end;

并想列出所有属性。我试过这个:

GetMem(PropList, SizeOf(PropList^));
PropCount := GetPropList(TTesting.ClassInfo, tkAny, nil);   
GetMem(PropList, PropCount*SizeOf(PPropInfo));
GetPropList(TTesting.ClassInfo, tkAny, PropList);

And PropList总是空的。当我尝试使用任何形式时并非如此。任何想法 ?


GetPropList()基于旧式 RTTI,仅描述类属性和类方法,这些属性和类方法声明为published(你的项目都不是)并且只有当类或祖先(比如TPeristent),已标记为{$M+}.

由于您使用的是 XE2,因此可以使用扩展 RTTI(在 Delphi 2010 中引入)来代替。它没有这样的限制。例如:

uses
  System.Rtti;

var
  Ctx: TRttiContext;
  PropList: TArray<TRttiProperty>;
begin
  PropList := Ctx.GetType(TTesting).GetProperties;
  ...
end;

Update:接口是一种特殊情况。接口只允许包含抽象方法,属性只是调用这些方法的语法糖。因此,接口上定义的属性不是真正的属性,就像它们在类类型上一样,因此不会生成 RTTI。这就是为什么您不能枚举从接口继承的属性。您可以使用扩展 RTTI 枚举接口的方法,但前提是接口已标记为{$M+}.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列出实现接口的类的所有属性 的相关文章

随机推荐

  • 如何在核心java中实现图?

    我有一个有向未加权图 给出了节点的数量和节点之间的所有链接 我尝试使用向量数组来完成该任务 但 java 不支持它 ArrayList 和 Vectors 支持随机访问迭代器 但无法在 java 中执行此操作 因为我是新手 我不想使用二维矩
  • 排序合并的数据框

    作为一个相当新的 R 程序员 我似乎遇到了一个奇怪的问题 可能是我对 R 缺乏经验 在读取连续文件并将其合并到单个数据帧中后 我发现顺序未按预期对数据进行排序 我在每个文件中有多个引用 但每个文件引用在不同时间获得的测量数据 这是代码 li
  • 正确的 Bash 和 shell 脚本变量大写 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我遇到过许多变量全部大写的 shell 脚本 我一直认为这存在严重的误解 我的理解是 按照惯例 也许很久以前就有必要 环境变量全部大写 但在像 Bash 这样的现代脚本环境中 我一直更喜欢
  • Google oauth java 客户端获取访问令牌失败,并显示“400 Bad Request {“error”:“invalid_request”}”

    我正在使用此处显示的 Web 服务器应用程序 示例 在我的回调 servlet 中 我想检索访问令牌 但无法成功执行此操作 以下是我的代码 Override protected String getUserId HttpServletReq
  • UIAnimation的理解

    我正在尝试使用以下代码来执行一些动画 void performSlidingfromX int xx fromY int yy UIImageView Image self getImage UIView beginAnimations n
  • 透明JButton

    是否可以使 JButton 透明 包括边框 但不透明文本 我扩展了 swing 的 JButton 并覆盖了它 Override public void paint Graphics g Graphics2D g2 Graphics2D g
  • 如何使用 DXL 脚本从 IBM Doors 加载特定基线

    我编写了一个从批处理文件运行的 DXL 脚本 它接收一个模块路径 一个基线和一个视图 批处理命令打开 IBM Doors 9 6 后 脚本应该转到具有相关视图的模块路径并加载输入的基线 我的问题是我的脚本加载了current基线而不是我输入
  • 如何将多个实体集绑定到一个 odata 控制器?

    我有很多不同的实体想要为其启用 OData 这些实体根据其类型分为不同的组 目前 默认设置是将 EntitySet 与控制器名称相匹配 但我不希望为我拥有的每个实体类型都有一个控制器 有没有一种方法可以将多个 EntitySet 映射到一个
  • 将动态连接字符串与 Breeze EFContextProvider 结合使用

    目前我有一个应用程序 web silverlight 其中我的 ObjectContext 的连接字符串是动态的 它基于用户登录的方式 因为我的每个客户都有自己的数据库 即 用户名 域 我试图找到一种使用 EFContextProvider
  • CSS 使 DIV 位置固定在具有 PE​​RSPECTIVE 属性的 DIV 内部

    我有一个获取问题 fixed with position fixed关系到 container 检查这个小提琴 https jsfiddle net a1zoghs0 2 我知道 如果我把 fixed在外面 container 它将有pos
  • GCC 有多少个优化级别?

    多少GCC优化级别有哪些 我尝试了 gcc O1 gcc O2 gcc O3 和 gcc O4 如果我使用非常大的数字 它将不起作用 不过 我已经尝试过 gcc O100 它编译了 有多少个优化级别 迂腐地说 您可以为 gcc 提供 8 个
  • 如何在 VSTS 构建代理上的本地主机上打开 TCP 端口?

    使用 Visual Studio Team Services 的在线托管版本时 我的单元测试无法连接到侦听生成代理本地主机上的 TCP 端口的服务 该服务能够启动并打开 TCP 端口 但在单元测试中似乎无法访问 错误信息 2017 06 2
  • ActionController::RoutingError(未初始化常量 AdminsController)

    我正在使用 Rails 3dhtmlxGrid 我创建了一个名为的控制器admin我们定义了 3 个函数 例如view data dbaction及其视图文件 下面是我的admin控制器文件 class AdminController lt
  • 无需 jQuery 即可平滑滚动锚链接

    是否可以使用平滑滚动来锚定链接 但是without jQuery 我正在创建一个新网站 但我不想使用jQuery 扩展这个答案 https stackoverflow com a 8918062 3851798 定义scrollTo函数后
  • 如何使用 wp7 的 GPS 获取地址名称

    我可以使用 GeoCoordinateWatcher 类获取 Windows Phone 7 上的当前 GPS 坐标 如下所示msdn 我只能得到Latitude and 经度值 但我想得到Address那个位置的 市场上有一个名为 Whe
  • 为什么 map/filter ... 不适用于无数组?

    Nothing 不是所有类型的子类型吗 scala gt val array new Array 5 array Array Nothing Array null null null null null scala gt array map
  • 列出所有应用程序 - 输出为文本文件

    我只是想知道如何使用最好的 applescript 来查找 Mac OS X 10 5 上安装的所有应用程序 并将其所有应用程序名称输出到文本文件中 Mac OS X 下安装的所有应用程序都注册在启动服务数据库 Launch Service
  • 如何使用 GitHub API?

    当它告诉我使用时 我不确定这意味着什么 GET repos owner repo commits sha 我如何使用该 API 调用来检索我正在查找的信息 GET repos owner repo commits sha GET是用于调用此
  • 绕特定点旋转(例如,绕0,0,0旋转)

    我一直在这个问题上进行了很多搜索 但我找不到真正合适的答案 我需要围绕给定点 例如 0 0 0 旋转圆柱体 但圆柱体的枢轴是默认给定的 我该如何改变它 I found this主题 这正是我想做的 但我不知道如何用 java 来做 为了更好
  • 列出实现接口的类的所有属性

    我有一个带有接口的类 TInterface interface IXMLNode function Get One Boolean function Get Two Boolean function Get Three Boolean pr