Delphi中的published
<p>Delphi中类的published属性则是可以在属性列表中看到并使用的属性</p><p>公布成员(published)和公共成员(public)具有相同的可见度,但published中声明的会显示在属性栏,public 不会!</p>
<p> published和public的限制访问属性是一样的 ;不过,published一般用于组件编程中,而不常用于应用程序中。</p>
<p>转自OBJECT PASCAL</p>
<p> "公布成员(published)和公共成员(public)具有相同的可见度。不同的是,运行时信息RTTI(runtime type information)为公布成员产生。RTTI允许应用程序动态地查询对象的域和属性、定位对象的方法。RTTI用于在下列情形下访问属性的值:保存 和加载文件时,在对象检查器(Object Inspector)中显示属性时,将指定的方法(即事件处理程序)与指定的属性(即事件)关联时。</p>
<p> 公布属性只限于某些数据类型。序数、串、类、接口和方法指针等类型可以被公布;由此可见,提供的基类型其上下界范围的序数值在0到31之间的集合类型也可 以被公布,即集合必需适合于字节、字或双字(Byte,Word或Double Word);除Real48之外,任何实数类型都可以被公布。数组类型的属性(不同于下面述及的数组属性array properties)不能被公布。"</p>
<p> </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<>tkClass then Exit; <br><br> mPropCount := mTypeData^.PropCount; <br> if mPropCount<= 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; </p>
<p> </p>
<p> </p>
<p>在TForm1 = class(TForm)下面多了Button1变量和Button1Click方法,它们其实是published类型的,当该类或父类使用了“{$M+}”编译指令的情况下,默认为published成员。published成员可以在Object Inspector看到,我们可以手工加上将代码改为:</p>
<p>type</p>
<p> TForm1 = class(TForm)</p>
<p> published</p>
<p> Button1: TButton;</p>
<p> procedure Button1Click(Sender: TObject);</p>
<p> private</p>
<p> procedure PriShowMsg();</p>
<p> { Private declarations }</p>
<p> public</p>
<p> procedure PubShowMsg();</p>
<p> { Public declarations }</p>
<p> end;</p>
<p>在implementation中对上述方法进行定义:</p>
<p>procedure TForm1.PriShowMsg;</p>
<p>begin</p>
<p> ShowMessage('私有方法调用');</p>
<p>end;</p>
<p> </p>
<p>procedure TForm1.PubShowMsg;</p>
<p>begin</p>
<p> </p>
<p>ShowMessage('公共方法调用');</p>
<p>end;</p>
<p>在Button1的OnClick事件方法中调用上述两个方法:</p>
<p>procedure TForm1.Button1Click(Sender: TObject);</p>
<p> begin</p>
<p> PriShowMsg;</p>
<p> PubShowMsg;</p>
<p>end;</p>
</div>
<div id="MySignature" role="contentinfo">
一花独放不是春,百花齐放春满园!
让机器视觉应用满天下,解放人类的眼睛和大脑!<br><br>
来源:https://www.cnblogs.com/QuincyYi/p/12729143.html
頁:
[1]