T1继承TCollection,T2继承TCollectionItem
T3,T4,T5继承T2
那T1里面能不能放T3, T4,T5
如果不能,如何实现类似的功能
谢谢各位先

解决方案 »

  1.   

    应该是可以的。就象所有的类都可以转成TObject一样。
      

  2.   

    我是这样写的
    x: T1
    y: T2
    y := T2(x.add)
    这样会出错
      

  3.   

    add 方法 是TCollection 定义的吗如果是  x: TCollection        
            y: T2
            y := T2(x.add)
    如果不是 既 在T1 里定义,TCollection没 定义
    应该是不能用的了
      

  4.   

    我在T1里重写了Add方法,返回TCardItem
      

  5.   

    父(子)是可以的,但
    子(父) 是不可以的。你的代码 T2(x.add) 等价于:子(父)。所以会出错
      

  6.   

    我这里有个这样的解决办法
    创建TCollection的子类,如: TCollectionChild = class(TCollection)...
    然后在TCollectionChild中重写Add方法,如:
    procedure Added(var Item: T2); override;
    ...{自己的实现}
    然后,
    x: TCollectChild;
    把刚才那条语句T2(x.add)就不会出错了
      

  7.   

    是这样
    x: T1
    y: T2
    y := T2(x).add
      

  8.   

    能,你可以看一下刘艺的DELPHI面向对象编程思想!!!
      

  9.   

    to:zyxg(仰天大笑出门去,我辈岂是蓬莱人)
    明显不行
    T2和T1就没有继承关系
    怎么可能可以这样转换
      

  10.   

    //T2和T1就没有继承关系如果非要显示的继承关系才能转换那你的问题就不要问了,不是很没有意义吗????你看看这个
    type
      TA=Class
        Value : Integer;
      end;
      TB = Class(TA)
        Value : String;
      end;
    var MyObject : TA;
    begin
      MyObject := TB.Create();
      TB(MyObject).Value := '这样就可以,你可以研究研究'
    end;
      

  11.   

    我想你搞错了
    我的意思是TB转TA
    或者说我的真正目的是想在一个容器类里面放若干个类的对象
      

  12.   

    type
      TTI = class of TCollectionItem;//该函数创建从TCollectionItem及其子类型的的实体。
    function AddCollectionItem(AItem:TTI): TCollectionItem;
    begin
      result := AItem.Create;
    end;procedure Oper;
    var
      t3: T2;//T2继承自TCollectionItem
    begin
      t3 := T2(AddCollectionItem(T2));
    end;
      

  13.   

    还可以这样:
    procedure OperX;
    var
      t4: T3;//T3继承自T2,T2继承自TCollectionITem
    begin
      t4 := T3(AddCollectionItem(T3));
    end;
      

  14.   

    看你的用户名知道你一定很爱玩Quake,有没那个服务器,单挑几把