Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:12:46
delphi类运算符is和as的使用实例

delphi类运算符is和as的使用实例|方法

在程序运行期间,可以使用Is 运算符和As 运算符来进行类信息检测和类型转换,通常也把这两个运算符称为运行时类型信息(RTTI:Runtime Type Information)运算符。

1.Is 运算符

Is 运算符用来检测一个对象在运行时的类的类型,具体形式如下:

object is class

如果返回值为True,那么对象Object 是类Class 或者是类Class 派生类的一个实例。如果对象为nil,返回值则为False。

2.As 运算符

As 运算符用来进行类型转换检测的,具体形式如下:

object as class
返回值为Object 的一个为Class 类型的引用。在运行期间,Object 必须是与Class 类兼容的一个类的对象或nil。通常为了避免类型不兼容,可以使用Is 运算符来进行类型判断。

下面的例子对Is 运算符和As 运算符进行了说明:

program Project1;

{$APPTYPE CONSOLE}

type

TPerson = class //人类

public

Name:string; //姓名

end;

TEmployee = class(TPerson) //顾客类

public

DeptName:string; //地址名称

procedure Infor; //只有子类具有"显示信息"的方法

end;

TCustomer = class(TPerson) //顾客类

public

DeptName:String;

procedure Infor;

end;

procedure TEmployee.Infor;

begin

Writeln(’姓名:’,Name,’; 部门名称:’,DeptName);

end;

procedure TCustomer.Infor;

begin

Writeln(’姓名:’,Name,’; 部门名称:’,DeptName);

end;

var

P1: TPerson; //声明一个人类的变量

E1: TEmployee; //声明一个顾客类的变量

begin

P1:=TPerson.Create; //P1 为父类的对象

P1.Name:=’张三’;

if P1 is TCustomer then (P1 as TCustomer).DeptName:=’人事部’ ;

if P1 is TCustomer then (P1 as TCustomer).Infor;

P1.Free;

P1:=TCustomer.Create; //P1 为子类的对象

P1.Name:=’冯六’;

if P1 is TCustomer then (P1 as TCustomer).DeptName:=’人事部’ ;

if P1 is TCustomer then (P1 as TCustomer).Infor;

P1.Free;

E1:=TEmployee.Create; //E1 为子类的对象

E1.Name:=’高七’;

if E1 is TEmployee then (E1 as TEmployee).DeptName:=’公关部’;

if E1 is TEmployee then (E1 as TEmployee).Infor;

E1.Free;

Readln;

end.

运行结果如下:

姓名:冯六; 部门名称:人事部

姓名:高七; 部门名称:公关部

这里有几点需要说明:

• 当P1 调用TPerson 类的构造函数的时候,创建的是一个TPerson 的对象,不可以调用子类TCustomer 中特有的过程Infor,也不可以对子类中的特有属性DeptName 进行操作。在调用时要用Is运算符来判断P1 是否为TCustomer 类的对象。

• TPerson 类的变量P1 被“创建”了两次,由于前后两次创建的类型不同,所以Is 运算符判断的结果不同。第2 次“P1 is TCustomer”返回的是True,然后进行类型转换并访问DeptName 属性和调用Infor 过程。




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759