类关键字:is和as
Object Pascal有两个特定的用于类的操作符:
is操作符
is操作符用来确定一个类是否具有一种特定的类型。再回到TAirplane和TMilitaryPlane类例子中,假设现有一个类的实例叫Plane,此类可能是TAirplane类的实例,也可能是TMilitaryPlane类的实例,或者也可能是一个完全不同的类型。在这种情况下,就可用is操作符来确定。例如:
var Plane: TMilitaryPlane; begin Plane := TMilitaryPlane.Create('TWD 779', 0); if Plane is TMilitaryPlane then { True} Writeln('True') else Writeln('False'); Plane.Free;
is操作符返回一个布尔值,若此变量具备了所需求的类型,is返回True,如果此变量不具备所要求的类型,is返回False,若所需要的类型时此变量的祖先类,那么is操作符也返回True。
例如,由于TMilitaryPlane是从TAirplane派生的,因此下面的结果也是True:
var Plane: TMilitaryPlane; begin Plane := TMilitaryPlane.Create('TWD 779', 0); if Plane is TAirplane then { True} Writeln('True') else Writeln('False'); Plane.Free;
Note
由于所有的类都是由TObject派生,因此下列结果总是True:
if AnyClass is TObject then DoSomething;
as操作符
is操作符没有as操作符用的多,as操作符是用来把一个指针强制指向一个特定类的类型,具体如下:
with Plane as TMilitaryPlane do DoSomething;
as操作符通常与with操作符连用。在这个例子中,Plane变量是一个指针,此指针可以是TAirplane类、TMilitaryPlane类或者两者之外的某个类的实例。as操作符用来把此指针强制指向TMilitaryPlane类,然后调用DoSomething代码。若Plane变量不是TMilitaryPlane类的实例(或者不是它祖先类的一个实例),那么这种转换就会失败。否则则成功,并将调用DoSomething代码。
至此,我们已经学习了有关Object Pascal中类的内容,一个设计完美的类很容易使用,并且节省很多程序编写时间,甚至可以说,用一个设计完美的类是一种享受——尤其当此类是自己创建的。
初探Object Pascal的类到此为止,接下来回过头去好好掌握这些知识,这对以后进一步学习的知识是非常重要的。