private protected public published 的区别(50分)

  • 主题发起人 主题发起人 ifillbad
  • 开始时间 开始时间
I

ifillbad

Unregistered / Unconfirmed
GUEST, unregistred user!
讨论 private protected public published 的区别
 
private 不允许外部 调用?
protected 仅仅允许以 继承者 调用???????
public 外部调用?
published 出现在 属性栏 ?
 
A private member is invisible outside of the unit or program where its class is declared. In other words, a private method cannot be called from another module, and a private field or property cannot be read or written to from another module. By placing related class declarations in the same module, you can give the classes access to one another's private members without making those members more widely accessible.

A protected member is visible anywhere in the module where its class is declared and from any descendant class, regardless of the module where the descendant class appears. A protected method can be called, and a protected field or property read or written to, from the definition of any method belonging to a class that descends from the one where the protected member is declared. Members that are intended for use only in the implementation of derived classes are usually protected.

A public member is visible wherever its class can be referenced.
 
private 仅可允许在该类单元中使用;一般用于对象的方法和字段
protected 允许该类以及他的子类调用;
publice : 可以任意访问
published 不知道[:)]
 
Private 成员在声明它的单元或程序之外是不可用的,换句话说,一个private 方法不能从另一个模块
(module)进行调用,也不能从另一个模块读取或写入一个私有的字段或属性。通过把相关类的声明放
在一个模块中,可以使它们拥有访问其它类的私有成员的能力,同时又不会增大这些成员的访问范围。
Protected 成员在声明它的类的模块中是随处可用的,并且在它的派生类中也是可用的,而不管派生类出
现在哪个模块。换句话说,在派生类的所有方法定义中,你可以调用protected 方法,也能读取或写入
protected 字段或属性。只有在派生类的实现中才应用的成员通常使用protected 属性。
对于public 成员,只要能使用类的地方都是可用的。
 
Published 成员和public 成员具有相同的可见性,不同之处是published 成员会产生RTTI 信息。RTTI
使应用程序能动态查询一个对象的字段和属性,也能定位它的方法。RTTI 用于在存储文件和从文件导入
时访问属性的值,也用于在Object Inspector 中显示属性,并且能为一些特定属性(叫做事件)关联特定
的方法(叫做事件处理程序)。
公布属性的数据类型受到限制,有序类型、字符串、类、接口和方法指针能被公布;当集合类型的基础
类型是有序类型,并且上界和下界介于0 到31 之间时(换句话说,集合必须符合byte、word 或double
word),集合类型也是可以公布的;除了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 编译器指示字。
 
接受答案了.
 
后退
顶部