zoukankan      html  css  js  c++  java
  • Delphi 系统[17]关键字和保留字 class -类

    Delphi 系统[17]关键字和保留字  class -类

    1、定义:

    • class:定义类的类型,或声明一个类方法。 
      • 类型必须先声明并给定名称,然后才能实例化(不能在变量声明中定义类类型。)仅在程序或单元的最外层范围内声明类,而不是在过程或函数声明中声明类。

    2、示例:

    { 定义空类,默认继承自TObject } 
    type 
      TMyObject = class 
    end; 
     
    { 定义 TMyObject 类并测试类方法 } 
    type 
      TMyObject = class(TObject) 
      private 
        FName: string; 
      protected 
      public 
        class procedure ShowResult; { 定义类方法,类方法可以直接通过类调用 } 
      published 
        property Name: string read FName write FName; 
      end; 
     
    { 实现类方法 } 
    class procedure TMyObject.ShowResult; 
    begin 
      ShowMessage('调用成功!'); 
    end; 
     
    { 调用类方法 } 
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      TMyObject.ShowResult;  { 直接通过 TMyClass 调用,不用创建实例 } 
    end; 
    

    3、关于的其他说明:

    type 
      className = class (ancestorClass)   memberList end;
    • 其中className是任何有效标识符,(ancestorClass)是可选的,memberList声明类的成员,即字段、方法和属性。
    • 如果省略(ancestorClass),则新类将直接从预定义的ToObject类继承。如果包含(ancestorClass)且memberList为空,则可以忽略end。
    • 类的类型声明还可以包括由该类实现的接口列表;请参阅实现接口。
    • 方法在类声明中显示为函数或过程标题,没有正文。为每个方法定义声明发生在程序的其他地方。

    例如,下面是来自Classes单元的TMemoryStream类的声明:

    type
    TMemoryStream = class(TCustomMemoryStream)
      private
        FCapacity: Longint;
        procedure SetCapacity(NewCapacity: Longint);
      protected
        function Realloc(var NewCapacity: Longint): Pointer; virtual;
        property Capacity: Longint read FCapacity write SetCapacity;
      public
        destructor Destroy; override;
        procedure Clear;
        procedure LoadFromStream(Stream: TStream);
    
        procedure LoadFromFile(const FileName: string);
        procedure SetSize(NewSize: Longint); override;
        function Write(const Buffer; Count: Longint): Longint; override;
      end;
    
    • TMemoryStream从TStream(在类单元中)派生,继承其大多数成员。
    • 但是它定义了--或者重新定义了--几个方法和属性,包括它的析构函数方法 Destroy。
    • 它的构造函数Create是从TObject继承而来的,因此不会重新声明。
    • 每个成员声明为 private, protected, 或者 public (此类没有 published 的成员);有关这些术语的解释,请参见类成员的可见性。

    根据此声明,您可以按如下方式创建TMemoryStream的实例:

    var 
      stream: TMemoryStream;
    begin
      stream := TMemoryStream.Create;
    end;

    4、关于 类方法 的其他说明:

    类方法是对类而不是对象进行操作的方法(构造函数除外)。类方法的定义必须以保留字类开始。例如:

    type
      TFigure = class
      public
        class function Supports(Operation: string): Boolean; virtual;
        class procedure GetInfo(var Info: TFigureInfo); virtual;
        ...
      end;
    

    类方法的定义声明也必须以类开头。例如:

    class procedure TFigure.GetInfo(var Info: TFigureInfo);
    begin
      ...
    end;
    
    • 在类方法的定义声明中,标识符自身表示调用该方法的类(可以是定义该方法的类的后代)。
    • 如果在类C中调用该方法,则Self属于类C的类型。因此,不能使用Self访问字段、属性和普通(对象)方法,但可以使用它调用构造函数和其他类方法。
    • 类方法可以通过类引用或对象引用调用。
    • 当通过对象引用调用它时,对象的类成为Self的值。

      

    创建时间:2021.08.12  更新时间:

    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
    也谈PostgreSQL的Vacuum机制及其最佳实践
    django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS
    Error: Invalid CSS after
    win32-x64-64inding.node is not a valid Win32 application
    Error: Module did not self-register
    数据分析|如何利用BI工具,探索各商品的潜在关联价值
    Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分
    Retrofit的文件上传和进度提示
    Retrofit的文件上传和进度提示
  • 原文地址:https://www.cnblogs.com/guorongtao/p/15131770.html
Copyright © 2011-2022 走看看