zoukankan      html  css  js  c++  java
  • 初探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类的两个实例,尽管这个两个实例在结构上是完全一致的,但它们在内存中是完全独立的,每个实例都有它自己的数据。

  • 相关阅读:
    页面反向映射之文件页面
    页面反向映射之匿名页面
    cp so文件导致进程SIGBUS或者SEGV原因分析
    由systemtap直接修改内核代码段想到的
    epoll的内核实现
    从一些现象看printf的缓冲机制
    Linux由浅入深学习 (转)
    每天一个Linux命令 (转)
    Redis与数据库同步问题
    PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2306878.html
Copyright © 2011-2022 走看看