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  更新时间: