Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:12:46 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}typeTPerson = class //人类publicName:string; //姓名end;TEmployee = class(TPerson) //顾客类publicDeptName:string; //地址名称procedure Infor; //只有子类具有"显示信息"的方法end;TCustomer = class(TPerson) //顾客类publicDeptName:String;procedure Infor;end;procedure TEmployee.Infor;beginWriteln(’姓名:’,Name,’; 部门名称:’,DeptName);end;procedure TCustomer.Infor;beginWriteln(’姓名:’,Name,’; 部门名称:’,DeptName);end;varP1: TPerson; //声明一个人类的变量E1: TEmployee; //声明一个顾客类的变量beginP1:=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 过程。
赞