万倍征途 發表於 2020-4-18 23:40:00

Delphi中的published

<p>Delphi中类的published属性则是可以在属性列表中看到并使用的属性</p>
<p>公布成员(published)和公共成员(public)具有相同的可见度,但published中声明的会显示在属性栏,public &nbsp;&nbsp;不会!</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;published和public的限制访问属性是一样的 ;不过,published一般用于组件编程中,而不常用于应用程序中。</p>
<p>转自OBJECT &nbsp;&nbsp;PASCAL</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"公布成员(published)和公共成员(public)具有相同的可见度。不同的是,运行时信息RTTI(runtime &nbsp;&nbsp;type &nbsp;&nbsp;information)为公布成员产生。RTTI允许应用程序动态地查询对象的域和属性、定位对象的方法。RTTI用于在下列情形下访问属性的值:保存 和加载文件时,在对象检查器(Object &nbsp;&nbsp;Inspector)中显示属性时,将指定的方法(即事件处理程序)与指定的属性(即事件)关联时。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;公布属性只限于某些数据类型。序数、串、类、接口和方法指针等类型可以被公布;由此可见,提供的基类型其上下界范围的序数值在0到31之间的集合类型也可 以被公布,即集合必需适合于字节、字或双字(Byte,Word或Double &nbsp;&nbsp;Word);除Real48之外,任何实数类型都可以被公布。数组类型的属性(不同于下面述及的数组属性array &nbsp;&nbsp;properties)不能被公布。"</p>
<p>&nbsp;</p>
<p>通过RTTI可以获得一个类的所有Published属性 <br>var <br>   mTypeInfo: PTypeInfo; <br>   mTypeData: PTypeData; <br>   mPropList: PPropList; <br>   mPropInfo: PPropInfo; <br>   mPropCount, i: Integer; <br> begin <br>   mTypeInfo := Form1.ClassInfo; <br><br>   mTypeData := GetTypeData(mTypeInfo); <br>   if mTypeInfo^.Kind&lt;&gt;tkClass then Exit; <br><br>   mPropCount := mTypeData^.PropCount; <br>   if mPropCount&lt;= 0 then Exit; <br><br>   GetMem(mPropList, mPropCount * SizeOf(PPropList)); <br>   try <br>   GetPropInfos(mTypeInfo, mPropList); <br>   for i := 0 to mPropCount - 1 do <br>   begin <br>       mPropInfo := mPropList^; <br>       ShowMessage(mPropInfo^.Name); <br>   end; <br>   finally <br>   FreeMem(mPropList, mPropCount * SizeOf(PPropList)); <br>   end; <br> end;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在TForm1 = class(TForm)下面多了Button1变量和Button1Click方法,它们其实是published类型的,当该类或父类使用了“{$M+}”编译指令的情况下,默认为published成员。published成员可以在Object Inspector看到,我们可以手工加上将代码改为:</p>
<p>type</p>
<p>&nbsp; TForm1 = class(TForm)</p>
<p>&nbsp; published</p>
<p>&nbsp; &nbsp; Button1: TButton;</p>
<p>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);</p>
<p>&nbsp; private</p>
<p>&nbsp; &nbsp; procedure PriShowMsg();</p>
<p>&nbsp; &nbsp; { Private declarations }</p>
<p>&nbsp; public</p>
<p>&nbsp; &nbsp; procedure PubShowMsg();</p>
<p>&nbsp; &nbsp; { Public declarations }</p>
<p>&nbsp; end;</p>
<p>在implementation中对上述方法进行定义:</p>
<p>procedure TForm1.PriShowMsg;</p>
<p>begin</p>
<p>&nbsp; ShowMessage('私有方法调用');</p>
<p>end;</p>
<p>&nbsp;</p>
<p>procedure TForm1.PubShowMsg;</p>
<p>begin</p>
<p>&nbsp;</p>
<p>ShowMessage('公共方法调用');</p>
<p>end;</p>
<p>在Button1的OnClick事件方法中调用上述两个方法:</p>
<p>procedure TForm1.Button1Click(Sender: TObject);</p>
<p>&nbsp;begin</p>
<p>&nbsp; &nbsp;PriShowMsg;</p>
<p>&nbsp; &nbsp;PubShowMsg;</p>
<p>end;</p>

</div>
<div id="MySignature" role="contentinfo">
    一花独放不是春,百花齐放春满园!
让机器视觉应用满天下,解放人类的眼睛和大脑!<br><br>
来源:https://www.cnblogs.com/QuincyYi/p/12729143.html
頁: [1]
查看完整版本: Delphi中的published