Class operators are slightly di erent from the operators above in the sense that they can only be used in class expressions which return a class. There are only 2 class operators, as can be seen in table (8.8).
An expression containing the is operator results in a boolean type. The is operator can only be used with a class reference or a class instance. The usage of this operator is as follows:
Object is Class
|
This expression is completely equivalent to
Object.InheritsFrom(Class)
|
If Object is Nil, False will be returned.
The following are examples:
Var
A : TObject; B : TClass; begin if A is TComponent then ; If A is B then; end; |
The as operator performs a conditional typecast. It results in an expression that has the type of the class:
Object as Class
|
This is equivalent to the following statements:
If Object=Nil then
Result:=Nil else if Object is Class then Result:=Class(Object) else Raise Exception.Create(SErrInvalidTypeCast); |
Note that if the object is nil, the as operator does not generate an exception.
The following are some examples of the use of the as operator:
Var
C : TComponent; O : TObject; begin (C as TEdit).Text:='Some text'; C:=O as TComponent; end; |
test10a.pp
----------------------------------------------------------------------
unit test10a;
interface
const
a = 'a';
b = 'b';
implementation
begin
end.
----------------------------------------------------------------------
test10b.pp
----------------------------------------------------------------------
program test;
uses
test10a;
var
c : Char;
begin
Write( 'A, or B: ' );
Readln( c );
case c of
a ,
b : Writeln( 'ok: ' + c );
else
Writeln( 'oops ' + c );
end;
end.
----------------------------------------------------------------------
This, however, fails.
test11a.pp
----------------------------------------------------------------------
unit test11a;
interface
const
a : char = 'a';
b : char = 'b';
implementation
begin
end.
----------------------------------------------------------------------
test11b.pp
----------------------------------------------------------------------
program test11b;
uses
test11a;
var
c : Char;
begin
Write( 'A, or B: ' );
Readln( c );
case c of
a ,
b : Writeln( 'ok: ' + c );
else
Writeln( 'oops ' + c );
end;
end.
----------------------------------------------------------------------
The only difference being the type identification of the char constants.
Bob
-- Bob Gibson on December 21, 2006 01:54 AM (view details)
const
a : char = 'a';
b : char = 'b';
var
c : Char;
begin
Write( 'A, or B: ' );
Readln( c );
case c of
a ,
b : Writeln( 'ok: ' + c );
else
Writeln( 'oops ' + c );
end;
end.
-- Bob Gibson on December 21, 2006 02:01 AM (view details)
-- Unregistered Visitor on April 22, 2007 06:10 PM (view details)