as的用法(20分)

  • 主题发起人 主题发起人 cjtmh
  • 开始时间 开始时间
C

cjtmh

Unregistered / Unconfirmed
GUEST, unregistred user!
as运算符是用来做类的转换,它会将左方操作数的这个变量所属的类,转为右方操作数那种类。而用在面向对象的程序设计时,as操作数可将左方的对象由原来所属的类,转为右方操作数的那种类。
但是我在看例子时是这样的
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage((Sender as TButton).Name);
end;
会出现btn1
是不是将sender转为了Tbutton类的对象
但为什么这行会出错?
TBeta = class
end;
procedure TForm1.btn1Click(Sender: TObject);
var
tmh:TBeta;
begin
ShowMessage((tmh as TButton).Name);
end;
 
as 是一个强制转换。而你定义的TBeta跟TButton不兼容,当然不能转换了
 
完全同意楼主的观点,AS的转换是有条件的
 
procedure TForm1.btn1Click(Sender: TObject);
var
tmh:TBeta;
begin
if tmh is TButton then
ShowMessage((tmh as TButton).Name);
end

As 为强制转换,TBeta没有祖先类TButton
 
后退
顶部