zoukankan      html  css  js  c++  java
  • Delphi的类和对象(六)- 封装(成员可见性)

    概念:封装就是指利用类将数据和方法通过访问控制符封装起来,从而实现功能的隐匿。
    类成员的可见性:
    private		//不可见。
    protected	//派生类可见。
    public		//可见。
    published	//可见。用于运行时信息。
    automated	//可见。用于兼容。
    
    //在范围以外时:{$M+}(默认)时是 published;{$M-}时是 public

    (1)私有成员访问符(private):表示类的成员为该类私有,之在该类中可见,也就是说类中所定义的私有成员只能由类中的成员或方法调用。

    (2)受保护成员访问符(protected):受保护的成员只能由该类自身和该类派生的子类所访问。如果只想要子类继承父类一部分功能就可以声明为受保护的。

    (3)公有的成员访问符(public):没有权限,只要成员还存在,就可以在程序的任何地方调用这个类中的成员,父类公有成员在所派生的子类中也可以访问。

    (4)发布的成员访问符(published):访问权限与公有访问权限一样,区别在于发布的成员在运行时可以产生运行时的类型信息,一般用于组件属性。

    (5)自动的成员访问符(automated):访问权限与公有访问权限一样,区别在于发布的成员会产生自动化类型的信息(ATI)。只有当定义或使用自动化对象(OLE技术)时才有必要声明。
    在类中如果不指明成员访问符,则类中的成员默认访问符为公有成员访问符,

    思路:如果向电脑及零部件抽象成不同的类,就可以很好地利用这些部件类组成一个新的电脑类,而一个电脑类在运行时提供给用户操作的只有一个开机,这样其他部件的初始化
    和启动过程就没必要提供给用户,而只需要提供给电脑类执行就可以了。所以在电脑类中只要将运行其他部件的方法设为私有或受保护的成员就可以了。

    //这个类中的两个字段没有封装
      TMyClass1 = class
        FName: string;
        FAge:  Integer;
      end;
    
      //这个类中的两个字段封装了, 外部不能读写
      TMyClass2 = class
        private
          FName: string;
          FAge:  Integer;
        //public
      end;
    
      //那怎么读写? 用属性啊
      TMyClass3 = class
      private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;
      {
        现在 TMyClass3 中的两个字段: FName、FAge 和两个方法: SetAge、SetName
        都被封装在私有区(private)内, 不允许外部读写, 只能是内部使用.
    
        不过, private 的封装在本单元内是无效的!
        现在好了, 有了 strict 标识符.
      }
    
      //这个封装好了, 在 private 前加了 strict ; 现在除了自己谁也访问不了私有区.
      TMyClass4 = class
      strict private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;
  • 相关阅读:
    C# 利用Autofac批量接口注入依赖【学习记录】
    c# Quartzs定时器的简单使用
    Web Api 宿主的搭建
    教你如何搭建自己的直播服务器简易
    自用电脑+外网开放+SSL认证(纯免费)
    sql 获取主键表和主键的方法
    sql 分裂字符串函数
    Sql 将一个整型数字转换成带前导零的固定长度数字字符串
    sql 根据外键表和外键列得到主键表和主键列的方法
    定位div
  • 原文地址:https://www.cnblogs.com/fansizhe/p/12723808.html
Copyright © 2011-2022 走看看