请问,单元的Private、Public、Publiced都能定义变量、过程、函数吗?如果继承窗体,三者将有什么用处?如果调用窗体三者有什么区别?
TKS!
TKS!
解决方案 »
- IdHttp 报错socket error # 10054 connection reset by peer,try except也不能捕获此错误
- 同志们 数据库开发中使用多线程,进来说说
- 我用数组方式创建了一组动态的DBEdit数据录入框,我现在想动态获取某个DBEdit的控件名称,请问如何做到?
- 关于文本文件的疑问?
- 无法定位程序输入点GETIUMS于动态连接库MSDART.dll上 在线急等 。。。。。。。。。。
- 我如何用delphi的wordapplication将word的主菜单控制的只显示文件项中的某几项?
- 请个位高手帮帮忙,dbgrid问题
- 为什么我的DELPHI6企业版找不到Proxies.pas这个文件?
- 请问在quickrep中用qrexpr控件怎样计算出所有字段的值?
- 怎么把记录类型转成字节数组呢?
- string 转换成 char 要怎样做?~!·
- 如何在RichEdit控件中捕获鼠标左钮双击事件?
public是批出的字段和方法是公有的。既在某个类中声明的公有成员,能被其他类的实例和类所在的单元以外的程序访问。
published指出的字段和方法是发行类型的,发行类型的成员在程序的设计期部和运行期间都是公有的。
看一些面向对象的书,里面比较详细。
如果继承窗体,三者将有什么用处?如果调用窗体三者有什么区别?
TKS!
Private 成员在声明它的单元或程序之外是不可用的,换句话说,一个private 方法不能从另一个模块(module)进行调用,也不能从另一个模块读取或写入一个私有的字段或属性。通过把相关类的声明放在一个模块中,可以使它们拥有访问其它类的私有成员的能力,同时又不会增大这些成员的访问范围。
Protected 成员在声明它的类的模块中是随处可用的,并且在它的派生类中也是可用的,而不管派生类出现在哪个模块。换句话说,在派生类的所有方法定义中,你可以调用protected 方法,也能读取或写入protected 字段或属性。只有在派生类的实现中才应用的成员通常使用protected 属性。
对于public 成员,只要能使用类的地方都是可用的。Published members(公布的成员)
Published 成员和public 成员具有相同的可见性,不同之处是published 成员会产生RTTI 信息。RTTI使应用程序能动态查询一个对象的字段和属性,也能定位它的方法。RTTI 用于在存储文件和从文件导入时访问属性的值,也用于在Object Inspector 中显示属性,并且能为一些特定属性(叫做事件)关联特定的方法(叫做事件处理程序)。
公布属性的数据类型受到限制,有序类型、字符串、类、接口和方法指针能被公布;当集合类型的基础类型是有序类型,并且上界和下界介于0 到31 之间时(换句话说,集合必须符合byte、word 或doubleword),集合类型也是可以公布的;除了Real48,任何实数类型都是可以公布的;数组类型的属性(区别于数组属性,array properties)不能是公布的。
一些属性虽然是可以公布的,但不能完全支持流系统,它们包括:记录类型的属性、所有可公布类型的数组属性以及包含匿名值的枚举类型的属性。如果published 属性属于前面所述的类型,Object Inspector不能正确显示它们,并且使用流向磁盘操作时也不能保存它们的值。
所有方法都是可以公布的,但一个类不能使用相同的名字公布两个或以上数目的被重载的方法。只有当字段属于类或接口类型时,它才是可以公布的。
A class cannot have published members unless it is compiled in the {$M+} state or descends from a class compiled in the {$M+} state. Most classes with published members derive from TPersistent, which is compiled in the {$M+} state, so it is seldom necessary to use the $M directive.
除非一个类是在{$M+}状态下被编译,或者派生于一个在{$M+}状态下被编译的类,否则它不能有公布的成员。大多数具有公布成员的类继承自TPersistent,而它是在{$M+}状态下被编译的,所以通常很少使用$M 编译器指示字。