我在书上经常看到把变量声明为基类,然后引用派生类实例的做法,我不知道为什么要把变量先声明为基类?如果直接声明为实例的类型不行吗?例如:
procddure TForm1.SearchControls(AParent:TWinControl;Tab:string);
var
ControlObj:TControl;
WinControlObj:TWincontrol;
i:Integer;
begin
for i:=0 to AParent.ControlCount -1 do begin
ControlObj:=AParent.Controls[i];
Memo1.Lines.Add(Tab+ControlObj.Name);
if ControlObj is TWinControl then begin
WinControlObj:=ControlObj as TWincontrol;
SearchControls(WinControlObj,Tab+' ');
end;
end;
end;
这是以树状视图的形式将窗体容器控件所包含的控件按包容关系显示出来的方法。
我不明白变量ControlObj为什么要声明为TControl类型,然后再引用TControl的派生类TWincontrol?直接声明为TWincontrol不行吗?
procddure TForm1.SearchControls(AParent:TWinControl;Tab:string);
var
ControlObj:TControl;
WinControlObj:TWincontrol;
i:Integer;
begin
for i:=0 to AParent.ControlCount -1 do begin
ControlObj:=AParent.Controls[i];
Memo1.Lines.Add(Tab+ControlObj.Name);
if ControlObj is TWinControl then begin
WinControlObj:=ControlObj as TWincontrol;
SearchControls(WinControlObj,Tab+' ');
end;
end;
end;
这是以树状视图的形式将窗体容器控件所包含的控件按包容关系显示出来的方法。
我不明白变量ControlObj为什么要声明为TControl类型,然后再引用TControl的派生类TWincontrol?直接声明为TWincontrol不行吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货