类的可见性

         类成员的可见性是对该类的使用者而言。在声明一个类时,类可以被分为 5 个区域,用以下 5 个

      关键字标识:

         private, protected, public, published, automated 。

         所有的类成员都被放置在不同的区域里,不同区域的类成员具有不同的可见性。如果类的定义和类的使用者在同一个单元内,那么该类的所有成员无论位于哪个区域,对于使用者而言都是可见

的。

      一个类对于相同单元的其他类来说,类似于 C++中的“友类”,其所有成员都可以被访问。因此,类成 员的可见性设置只是在它们位于不同单元时,才是有效的。这时候,区域内成员的可见性规

定如下:
         (1) private 域:总不可见。这个区域用来隐藏一些实现细节并防止使用者直接修改敏感信息,比如容纳属性的存取字段和方法。     
         (2) protected:派生类可见。这样既可以起到 private 域的作用,也能给派生类提供较大的灵活性。
         (3) public:总可见。通常用来放置构造、析构函数等供使用者调用的方法。
         (4) published:总可见。而且这个区域的类成员有运行时类型信息,该区域通常用来放置供使用者访问的属性和事件。
         (5) automated:总可见。而且该域的成员具有自动化类型信息,用于创建自动化服务器。该关键字已经不再使用,为向后兼容保留。

         类的成员通常都是很明确指定了它所属区域的,但并不总是这样,凡事都是有例外的。比如我们在窗体上放置一个按钮并双击它生成 OnClick 事件过程后,单元的源代码中对窗体类的定义就

变成了下面的样子:
         type
          TForm1 = class(TForm)
            Button1: TButton;
            procedure Button1Click(Sender: TObject);
          private
          { Private declarations }
          public
          { Public declarations }
          end;
我们发现字段 Button1  和过程 Button1Click  并没有被明确地放到哪个可见性区域中。那么这时候它们的可见性按什么规则来确定呢?此时和编译指令$M 密切相关。

    后面我们要讲:$M 用来控制编译器是否给类生成运行时类型信息。所以,在{$M+}状态,Button1 和 Button1Click 被隐含指定到 published 域;在{$M-}状态,则到 public 域。

    那么对于上面的 TForm1 来说,因为它现在处在{$M+}状态,所以 Button1 和 Button1Click 实际上 被隐含指定到 published 域。

    要了解 VCL 定义的类的成员位于哪个域,有两种行之有效的办法:一是直接看类的源代码,这是最直接、最准确的(我们很感谢 Delphi 能附带绝大部分的源代码);另外也可以看 Delphi 在线帮助,帮助中,类成员名称前有区域标记符号:绿方框的表示位于published 区,黄方框的表示位于 protected区,无标示的表示位于 public 区;如果是蓝箭头,则表示是一个只读属性。Delphi 在线帮助写得比较 简练,而且似乎有越来越简练的趋势,因为在 Delphi   6/Dlephi   7 的帮助中,将原来有的一些例子都去掉了!不过留下的的确都是精华,很值得研究。

具体继续学习《delphi精要》3.3类和类成员

转载于:https://www.cnblogs.com/Bubalus/archive/2011/04/12/2014272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值