• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi中的published

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Delphi中类的published属性则是可以在属性列表中看到并使用的属性

公布成员(published)和公共成员(public)具有相同的可见度,但published中声明的会显示在属性栏,public   不会!

    published和public的限制访问属性是一样的 ;不过,published一般用于组件编程中,而不常用于应用程序中。

转自OBJECT   PASCAL

     "公布成员(published)和公共成员(public)具有相同的可见度。不同的是,运行时信息RTTI(runtime   type   information)为公布成员产生。RTTI允许应用程序动态地查询对象的域和属性、定位对象的方法。RTTI用于在下列情形下访问属性的值:保存 和加载文件时,在对象检查器(Object   Inspector)中显示属性时,将指定的方法(即事件处理程序)与指定的属性(即事件)关联时。

    公布属性只限于某些数据类型。序数、串、类、接口和方法指针等类型可以被公布;由此可见,提供的基类型其上下界范围的序数值在0到31之间的集合类型也可 以被公布,即集合必需适合于字节、字或双字(Byte,Word或Double   Word);除Real48之外,任何实数类型都可以被公布。数组类型的属性(不同于下面述及的数组属性array   properties)不能被公布。"

 

通过RTTI可以获得一个类的所有Published属性
var
mTypeInfo: PTypeInfo;
mTypeData: PTypeData;
mPropList: PPropList;
mPropInfo: PPropInfo;
mPropCount, i: Integer;
begin
mTypeInfo := Form1.ClassInfo;

mTypeData := GetTypeData(mTypeInfo);
if mTypeInfo^.Kind <> tkClass then Exit;

mPropCount := mTypeData^.PropCount;
if mPropCount <= 0 then Exit;

GetMem(mPropList, mPropCount * SizeOf(PPropList));
try
GetPropInfos(mTypeInfo, mPropList);
for i := 0 to mPropCount - 1 do
begin
mPropInfo := mPropList^[i];
ShowMessage(mPropInfo^.Name);
end;
finally
FreeMem(mPropList, mPropCount * SizeOf(PPropList));
end;
end; 

 

 

在TForm1 = class(TForm)下面多了Button1变量和Button1Click方法,它们其实是published类型的,当该类或父类使用了“{$M+}”编译指令的情况下,默认为published成员。published成员可以在Object Inspector看到,我们可以手工加上将代码改为:

type

  TForm1 = class(TForm)

  published

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    procedure PriShowMsg();

    { Private declarations }

  public

    procedure PubShowMsg();

    { Public declarations }

  end;

在implementation中对上述方法进行定义:

procedure TForm1.PriShowMsg;

begin

  ShowMessage('私有方法调用');

end;

 

procedure TForm1.PubShowMsg;

begin

 

ShowMessage('公共方法调用');

end;

在Button1的OnClick事件方法中调用上述两个方法:

procedure TForm1.Button1Click(Sender: TObject);

 begin

   PriShowMsg;

   PubShowMsg;

end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
机械臂的DH参数,正运动学求解,Jacob矩阵(含Matlab代码)发布时间:2022-07-18
下一篇:
蒙特卡洛方法 matlab 实现发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap