首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于DELPHI 基类变量引用派生类实例的有关问题

2013-08-13 
请教大家关于DELPHI 基类变量引用派生类实例的问题。我在书上经常看到把变量声明为基类,然后引用派生类实例

请教大家关于DELPHI 基类变量引用派生类实例的问题。
我在书上经常看到把变量声明为基类,然后引用派生类实例的做法,我不知道为什么要把变量先声明为基类?如果直接声明为实例的类型不行吗?例如:
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不行吗?
[解决办法]
因为TWincontrol.Controls属性就是个TControl类型
[解决办法]
这叫做向上转型,你自己上网查一下吧。
[解决办法]
为了应用面向对象之多态!
呵呵!
架构清晰代码复用!
[解决办法]
这样对于数据访问更安全,派生类增加的方法和属性都可以隐藏掉。
[解决办法]
那个Controls属性就是TControl
[解决办法]
这个和使用TStringList一样,声明的时候很多会声明成TString

热点排行