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