delphi 怎么实现反射?

tfp 2005-07-28 08:22:45
可以做到像J一样根据类名构造出对象实例吗?
...全文
915 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyan55 2005-07-30
  • 打赏
  • 举报
回复
过路...
w95927w 2005-07-30
  • 打赏
  • 举报
回复
《Delphi5开发人员指南》 前几章 有类似说明

在...

第三部分 基于组件的开发 第20章 20.5节有说明.. TypInfo.pas ...
w95927w 2005-07-30
  • 打赏
  • 举报
回复
D7以下好像只能用 RTTI ...
tfp 2005-07-30
  • 打赏
  • 举报
回复
hudepeng
sdzeng 2005-07-30
  • 打赏
  • 举报
回复
delphi在2005以下版本,是不支持类反射的
只能使用RTTI模拟
必须先RegisterClasses再用GetClass
---------------------
procedure TForm1.BitBtn1Click(Sender: TObject);

begin
{ make sure the classes are registered so that GetClass will work -- }
{ Usually, this goes in the initialization section where it is only executed once }
RegisterClasses([TIcon, TBitmap, TJPEGImage, TMetafile]);
Edit1.Text := GraphicExtension(TGraphicClass(GetClass(Edit2.Text)));
end;
----------------

http://www.csdn.net/news/newstopic/17/17588.shtml

-------------
嘉宾[周爱民]: Diamondback是不是引入了类似于java中的反射机制?

那就是for .. in ...了。

[2004-9-29 14:24:00]



嘉宾[左轻侯]: Diamondback是不是引入了类似于java中的反射机制?

是的,其实Delphi for Win32已经有类似的机制,从Delphi 8开始又进行了增强,现在Delphi对反射的支持已经不逊色于C#

[2004-9-29 14:24:00]

嘉宾[周爱民]:

for .. in.. 在Delphi 32下也有实现。这是让我惊讶的实现。

另外,刚才有人提到for ... in.. 是否是反射机制的问题。其实反映本身是.NET RTL一级的事,对于delphi来说,for..in..只是对它的使用,并不是说实现。但delphi 32中的for .. in.. 则是完整的实现了。

[2004-9-29 14:32:00]




tfp 2005-07-30
  • 打赏
  • 举报
回复

强!
yxknet 2005-07-29
  • 打赏
  • 举报
回复
来学习的
JavaD 2005-07-28
  • 打赏
  • 举报
回复
同楼上,但是设置类的时候,还是需要使用更多的反射机制,
例如
SetStrProp(theObj,'Caption','标题');
势必造成性能的影响,
可以考虑声明一个接口,程序中使用该接口来完成工作.而类实现这个接口就可以了
lili1 2005-07-28
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TButtonClass=class of TButton;
TLabelClass=Class of TLabel;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var b:TButton;
l:TLabel;
begin
RegisterClasses([TButton,TLabel]);//注册类。


//根据名字"TButton"生成一个实例。
b:=TButtonClass(FindClass('TButton')).Create(self);
b.Parent:=self;
b.Top:=0;
b.Left:=0;

//根据名字"TLabel"生成一个实例。
l:=TLabelClass(FindClass('TLabel')).Create(self);
l.Parent:=self;
l.Top:=100;
l.Left:=100;
l.Caption:='标签';

end;

end.
Eastunfail 2005-07-28
  • 打赏
  • 举报
回复
GetClass('xxx').Create

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧