public和published?(50分)

  • 主题发起人 主题发起人 day_and_day
  • 开始时间 开始时间
D

day_and_day

Unregistered / Unconfirmed
GUEST, unregistred user!
public: 可声明所有属性
published:可声明某些类型的属性,只有在published中声明的属性才能显示在object inspector
在《delphi入门与精通》中讲到public声明运行时属性,published声明计划时属性,何意?

烦请发表高论!
 
Published
在Published部分声明的成员,其可见性与在Public部分声明的成员的可见性是一样的,它们都是
公共的,所谓公共的就是说这些成员可以被其它类的实例引用,Published和Public的区别在于成员的
运行期类型信息不同,delphi的元件库VCL正是通过运行期类型信息来访问元件的属性值的,此外Delphi
.的IDE还通过运行期类型信息决定Object Inspector中的属性列表。
注意:只有当编译开关$M的状态为{$M+}时或者基类是用{$M+}编译的时,类的声明中才能有Publish-
ed部分,换句话说,编译开关$M用于控制运行期类型信息的生成。
在Published部分声明的成员一般是属性,不过也可以声明字段,Object Pascal规定, 在Published
部分声明的字段只能是类类型的,如果是其它类型的字段中只能在Public、Protected或Private部分声
明。在Published部分声明的属性不能是数组属性,另外属性的数据类型只能是有序类型、部分实型
(single,Double,Extended,Comp)、字符串类型、小集合类型、类类型或者方法指针类型,其中小集合
类型是指集合的基类型的上下界序号在0到15之间的集合。

Public
在public声明的成员是公共的,也就是说,它们虽然是在某个类中声明的。但类的实例也可以引用,
相当于C语言中的外部变量,例如,假设应用程序由两个Form构成,相应的单元是Unit1和Unit2,您希望
Unit2能共享Unit1的整型变量count,你可以把count在TForm1类中的Public部分声明,然后把Unit1加到
unit2的interface部分就可以了。
注意:面向对象的编程思想其特征之一就是隐藏复杂性,除非您必须把某个成员在不同类之间共享,
一般来说尽量不要把成员声明在类的Public部分,以防止程序意外地不正确地修改了数据。
 
"在《delphi入门与精通》中讲到public声明运行时属性,published声明[red]计划时[/red]属性,何意?"
其中的[red]设划时[/red],就是指设计时
 

published类型的属性也可以是任何类型,只是,如果不是常规的类型,你必须提供对应的编
辑器而已!!
“常规类型”delphi都已经提供了编辑器。
 
在编写控件时,是不是声明在public中的属性不在object inspector中显示,
而声明在published中的属性显示在object inspector中
是不是两者成员运行期类型信息不同而决定这种结果?
 
准确讲,只有published部分的属性、事件、方法、域变量等才有运行时类型信息(RTTI),
见Delphi5开发人员指南2。18。3节
 
后退
顶部