初探Object Pascal的类(五)
字段
简而言之,类的字段是在类的声明中加以声明的变量,它们可以看作是具有类作用域的变量,除了类字段的存取级别可以声明为私有(private)、公用(public)或保护(protected)并加以控制外,类的字段本质与记录类型的字段是一样的。私有和保护字段对于类来说是私有的,在类的外部是看不见的;然而对于公用字段,只需要一个对象,在类的外部就可以存取。
以前面的TMyRect类为例,它没有公用(public)字段,因此下面的代码将出现一个编译器错误“Undeclared identifier: ‘Left’”
Rect2 := TMyRect.CreateVal(0, 0, 100, 100); { 100 * 100 大小的矩形} Rect2.Left := 0;
Note
如果TMyRect类声明在一个独立的单元,前面讨论的有关私有字段的访问将是禁止的,将会产生编译器错误,但若TMyRect类的声明和使用是在同一个单元,其私有字段的访问将是允许的,包括在相同单元中的类具有友元特权,即不同类之间可以互相存取彼此私有字段。
Object Pascal用属性(property)来控制私有字段的存取,属性可以是读/写、只读或只写,当属性是读时,属性就会调用一个读方法,当属性是写时,它就会调用一个写方法。在任何存取属性的时候,就会调用这些读和写的方法。写方法特别重要,因为当给属性赋值后,它可用来验证输入或者执行其他任务。用这种方式,私有字段总是通过属性来存取的,它不是直接存取的。在后面的讲解中,我们会详细讨论“属性”的。
当建立类的实例时,每个实例都拥有自己的数据。例如:
Rect1 := TMyRect.CreateVal(100, 100, 500, 500); Rect2 := TMyRect.CreateVal(0, 0, 100, 100);
上面的这段代码建立了TMyRect类的两个实例,尽管这个两个实例在结构上是完全一致的,但它们在内存中是完全独立的,每个实例都有它自己的数据。
posted on 2011-12-30 02:07 pchmonster 阅读(727) 评论(0) 编辑 收藏 举报