as ,is 是delphi中对象的rtti信息的比较与转换用的运算符。
as:多用于转换;
is:多用于比较;
如
for i:=componetcount-1 downto o do
if componets is tedit then//---判断控件是不是TEDIT控件
(componets as tedit).text:='aaa';//---将当前控件强制转换为TEDIT类并为
其TEXT属性赋值 AAA
既然你想知道底层实现,那么写一个语句,然后调试跟踪汇编代码。(Delphi的源码当中也是汇编而不是PAS)。
原理就是
function ObjIsClass(aObj, aClass): Boolean;
begin
Result:= aObj.ClassPtr = aClass;
while (Result = False) and Assigned(aClass.ParentClass) do
begin
aClass:= aClass.ParentClass;
Result:= aObj.ClassPtr = aClass;
end;
ebd;