Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在公共属性上使用GetPropInfo

在公共属性上使用GetPropInfo
EN

Stack Overflow用户
提问于 2019-04-07 09:20:24
回答 1查看 749关注 0票数 3

据我所知,自Delphi2010以来,我不仅可以在发布的版本上使用RTTI,还可以在公共属性上使用RTTI。我有一个旧的Delphi7代码,它也可以在XE7下工作,但我仍然无法访问公共属性。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uses
  System.TypInfo;

procedure TForm1.GetPublicProp;
var
  AColumn: TcxGridDBColumn;
  APropInfo: PPropInfo;
begin
  AColumn := MycxGridDBTableView.Columns[0];
  APropInfo := GetPropInfo(AColumn, 'Index');
  if (APropInfo = nil) then
    showmessage('not found');
end;

( TcxGridDBColumn是TcxGrid > DevExpress组件中的一列)

显然,我遗漏了什么,或者我完全误解了RTTI在XE下的工作方式,仍然无法访问公共属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-07 22:03:53

一个片段,它使用新的TRTTIContext记录作为入口点来获取类型,然后获取其属性。

注意,它并不显式地需要TypInfo单元。您可以使用原始的PTypeInfo获取RTTIType,但是您可以只传递AnyObject.ClassType,它将被视为PTypeInfo。

从类型中,您可以获得一个属性数组,我相信您必须迭代这些属性才能找到正确的属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uses
  System.Rtti;

type
  TColumn = class
  private
    FIndex: Integer;
  public
    property Index: Integer read FIndex write FIndex;
  end;

var
  AnyObject: TObject;
  Context: TRttiContext;
  RType: TRttiType;
  Prop: TRttiProperty;
begin
  AnyObject := TColumn.Create;
  TColumn(AnyObject).Index := 10;

  try
    // Initialize the record. Doc says it's needed, works without, though.
    Context := TRttiContext.Create;

    // Get the type of any object
    RType := Context.GetType(AnyObject.ClassType);

    // Iterate its properties, including the public ones.
    for Prop in RType.GetProperties do
      if Prop.Name = 'Index' then
      begin
        // Getting the value.
        // Note, I could have written AsInteger.ToString instead of StrToInt.
        // Just AsString would compile too, but throw an error on int properties.
        ShowMessage(IntToStr(Prop.GetValue(AnyObject).AsInteger));

        // Setting the value.
        Prop.SetValue(AnyObject, 30);
      end;
  finally
    AnyObject.Free;
  end;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55557407

复制
相关文章
Effective Java(第三版)——条目十六:在公共类中使用访问方法而不是公共属性
“ 有时候,你可能会试图写一些退化的类(degenerate classes),除了集中实例属性之外别无用处”
每天学Java
2020/06/01
8470
Effective Java(第三版)——条目十六:在公共类中使用访问方法而不是公共属性
Python - 面向对象编程 - 公共属性、保护属性、私有属性
无论是类对象还是实例对象,都可以通过 ._类名__名称 来调用私有属性、方法,这算是一种间接调用
小菠萝测试笔记
2021/09/07
2.2K0
javascript 私有化属性,和公共属性
function TestClassA(name, number) { this.name = name; //public this.number = number; //public var account = ''; //private var phone = '13612345678'; //private this.getAcco
windseek
2018/05/15
8060
【示例】在NO INMEMORY表上指定INMEMORY列属性
从OracleDatabase 12c第2版(12.2)开始,可以在尚未指定为 INMEMORY 的对象的列级别指定 INMEMORY 子句。
Yunjie Ge
2022/04/24
1K0
【示例】在NO INMEMORY表上指定INMEMORY列属性
在 Linux 上使用 BusyBox
它的所有命令都被编译到一个二进制文件里(busybox),它的手册只有 81 页(根据我对 man 送到 pr 管道的计算),但它涵盖了近 400 条命令。作为一个例子的比较,这是 “原版” 的 useradd —help 的输出:
用户8989785
2021/10/13
2.7K0
在 Kubernetes 上使用 Jenkins
有几种方法可以在 DevOps 环境中管理您的云基础架构。DevOps 是一种鼓励快速流动的应用程序开发以及促进 IT 团队开发、测试、发布过程无缝无缝衔接的方法。
kubernetes中文社区
2019/09/09
4.1K1
在 Linux 上使用 Multitail
当你想同时查看多个文件(尤其是日志文件)的活动时,multitail 命令会非常有用。它的工作方式类似于多窗口形式的 tail -f 命令。也就是说,它显示这些文件的底部和添加的新行。虽然通常使用简单,但是 multitail 提供了一些命令行和交互式选项,在开始使用它之前,你应该了解它们。
用户8639654
2021/09/22
2K0
在window上使用cmake
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/using-msys-make-in-windows/
羽翰尘
2019/11/19
1.5K0
在PySpark上使用XGBoost
我这里提供一个pyspark的版本,参考了大家公开的版本。同时因为官网没有查看特征重要性的方法,所以自己写了一个方法。本方法没有保存模型,相信大家应该会。
Sam Gor
2021/04/26
5.1K1
在 Kubernetes 上使用 Jenkins
有几种方法可以在 DevOps 环境中管理您的云基础架构。DevOps 是一种鼓励快速流动的应用程序开发以及促进 IT 团队开发、测试、发布过程无缝无缝衔接的方法。
LinuxSuRen
2019/07/31
3.6K1
[WPF 自定义控件]在MenuItem上使用RadioButton
上图这种包含多选(CheckBox)和单选(RadioButton)的菜单十分常见,可是在WPF中只提供了多选的MenuItem。顺便一提,要使MenuItem可以多选,只需要将MenuItem的IsCheckable属性设置为True:
dino.c
2020/02/25
2.2K0
[WPF 自定义控件]在MenuItem上使用RadioButton
CA1024:在适用处使用属性
在大多数情况下,属性表示数据,方法执行操作。 访问属性的方式类似于访问字段,这使得它们更易于使用。 如果一个方法具备以下条件之一,则该方法可能很适合成为属性:
用户4268038
2022/01/10
4490
OxyPlot.WPF 公共属性一览
注意:本文仅供需要时参阅,无休闲阅读属性,前方高能(枯燥),非战斗人员请速速撤离。
独立观察员
2022/12/06
5K0
OxyPlot.WPF 公共属性一览
在hexo博客上使用aplayer
在hexo博客上使用aplayer 起因 因为以前我配置aplayer遇到了挺多难题的 配置好之后 hexo s一看 没问题啊😕 但是hexo g -d上传完打开链接一看文字链接打不开🤔 而现在 我才知道配置错了 开始教程 如果使用的是butterfly的主题 可以直接在inject里面找到head和bottom分别写 先在head里面添加 - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min
Wlog
2022/03/30
1K0
在hexo博客上使用aplayer
在Ubuntu上安装使用CouchPotato
CouchPotato(https://couchpota.to/)是开源的自动种子下载器,它是免费的影视资源搜索器,您只要输入资源的名称和或关键词,即可进行后台搜索,支持下载字幕,支持通过bt软件下载。CouchPotato使用C/S架构,Python开发。 CouchPotato源代码:https://github.com/CouchPotato/CouchPotatoServer CouchPotato (CP) is an automatic NZB and torrent downloader.
Zip
2018/07/20
3.3K0
在 Andorid 上使用 eBPF 程序
截至目前(2023-04),Android 还未对 eBPF 程序的动态加载做出较好的支持,无论是以 bcc 为代表的带编译器分发方案,还是基于 btf 和 libbpf 的 CO-RE 方案,都在较大程度上离不开 Linux 环境的支持,无法在 Android 系统上很好地运行^WeiShu。
云微
2023/08/14
7090
在 Andorid 上使用 eBPF 程序
截至目前(2023-04),Android 还未对 eBPF 程序的动态加载做出较好的支持,无论是以 bcc 为代表的带编译器分发方案,还是基于 btf 和 libbpf 的 CO-RE 方案,都在较大程度上离不开 Linux 环境的支持,无法在 Android 系统上很好地运行1。
云微
2023/10/16
3250
在 OS X 上使用 Docker
本文介绍了如何在 OS X 上使用 Docker,包括使用 boot2docker 和使用 Linux 虚拟机两种方法。首先介绍了在 CentOS 6.5 上的安装过程,然后讲解了如何使用 Dockerfile 构建一个简单的 Go 语言服务器,并通过 docker build 和 docker run 命令在本地构建和运行镜像。最后介绍了在 OS X 上使用 Docker 的两种方法:使用 boot2docker 和使用 Linux 虚拟机。
Weston Wu
2018/01/05
3.3K0
在 View 上使用挂起函数
Kotlin 协程 让我们可以用同步代码来建立异步问题的模型。这是非常好的特性,但是目前大部分用例都专注于 I/O 任务或是并发操作。其实协程不仅在处理跨线程的问题有优势,还可以用来处理同一线程中的异步问题。
Android 开发者
2022/09/23
2.4K0
在Android P上使用Http
不少同学在适配Android P的时候会遇到not permitted by network security policy问题:
JarvanMo
2018/10/15
2.1K0

相似问题

在静态方法上模拟公共属性?

10

在c#上的静态方法中使用公共属性

10

无法在模拟对象上设置公共属性

13

在公共WiFi上使用https

18

在serilog日志中使用公共属性

124
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文