(delphi11最新学习资料) Object Pascal 学习笔记---第12章第1节 ( 类数据、Virtual类方法和隐藏的self参数)

12.1.1 类数据

​ 类数据是所有类对象之间共享的数据,提供全局存储但具有类特定的访问权限(包括访问限制)。您如何声明类数据?只需在类中定义一个标记为“class var”的部分:

type  
  TMyData = class  
  private  
    class var  
      FCommonCount: Integer;  
  public  
    class function GetCommon: Integer;  
  end;

​ 类数据字段的声明块可以在同一部分的 var 中进行(如下所示,在 private 下面):

type  
  TMyData = class  
  private  
    class var  
      FCommonCount: Integer;  
    var  
      MoreObjectData: string;  
  public  
    class function GetCommon: Integer;  
  end;

​ 除了声明类数据,您还可以定义类属性,我们将在后面的部分中介绍。

12.1.2 Virtual类方法和隐藏的self参数

​ 虽然类方法的概念在各种编程语言中是通用的,但Object Pascal的实现有一些独特之处。首先,类方法有一个隐含的(或隐藏的)Self参数,就像实例方法一样。然而,这个隐藏的Self参数是指向类本身的引用,而不是类的一个实例。

​ 乍一看,类方法有一个隐藏的参数指向类本身似乎没什么用。毕竟,编译器知道方法的类。然而,有一种特殊的语言特性可以解释这一点:与大多数其他语言不同,在Object Pascal编程语言中,类方法可以是Virtual类型。也就是说,在派生类中,你可以覆盖基类的方法,就像你可以对普通方法所做的那样。

注解:对Virtual类方法的支持与对Virtual构造函数的支持相关(这是一种特殊用途的类方法)。这两种特性在许多编译型和强类型的OOP语言中都找不到。

12.1.3 类的静态方法

​ 在语言中引入静态类方法是为了平台兼容性。普通类方法与静态类方法之间的区别在于,静态类方法没有对其自身类的引用(没有指示类本身的Self参数),也不能是Virtual类型。

​ 下面是一个简单的例子,其中有一些不正确的语句已被注释掉,这个例子来自ClassStatic示例:

type  
  TBase = class  
  private  
    class procedure TBase.One;  
  begin  
    // Error: Instance member 'FTmp' inaccessible here  
    // Show(FTmp);  
    Show('One');  
    // Show(Self.ClassName);  
    Show(ClassName);  
  end;  
  class procedure TBase.Two;  
  begin  
    Show('Two');  
    // Error: Undeclared identifier: 'Self'  
    // Show(Self.ClassName);  
    Show(ClassName);  
    Two;  
  end;  
  end;

​ 在这两种情况下,您可以直接调用这些类方法,或者通过一个对象来调用它们:

TBase.One;  
TBase.Two;  
Base := TBase.Create;  
Base.One;  
Base.Two;

​ 在Object Pascal中,静态类方法有两个有趣的特性,使其非常有用。第一个是可以用于定义类属性,这将在下一部分介绍。第二个是静态类方法与C语言完全兼容,接下来将会解释。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值