【问题标题】:Generic TypeIdenitifier convertion.How?通用类型标识符转换。如何?
【发布时间】:2010-04-18 10:56:38
【问题描述】:

如何将 TypeIdenitifier 转换为类类型?我需要使用隐式转换。

type
  TMyChildArray<T>=class(TMyArray<T>)
    private
      FData:Array of T;
      procedure AddEnd();
  end;

  TTypeIdenitifierParentClass=class(TAnotherParentClass)
    protected
      TestField:Cardinal;
  end;


  procedure TMyChildArray<T>.AddEnd();
  var elem:T;
  begin
    for elem in Fdata do
      TTypeIdenitifierParentClass(elem).TestField:=0;
  end;

我在隐式转换“TTypeIdenitifierParentClass(elem).TestField:=0;”中得到“无效类型转换”。

我想使用的原则是TypeIdenitifier将代表一个从TTypeIdenitifierParentClass派生的类。类类型有很多,但它们都是该类的派生类。

我该怎么做?

【问题讨论】:

    标签: delphi generics delphi-2009 delphi-2010 generic-programming


    【解决方案1】:

    delphi 抱怨转换的原因是因为编译器无法知道 T 是否可以转换为“TTypeIdenitifierParentClass”。您需要将 T 限制为从“TTypeIdenitifierParentClass”下降的类

    试试下面的

    type
      TTypeIdenitifierParentClass=class(TAnotherParentClass)
        protected
          TestField:Cardinal;
      end;
    
      TMyChildArray<T: TTypeIdenitifierParentClass>=class(TMyArray<T>)
        private
          FData:Array of T;
          procedure AddEnd();
      end;
    
      procedure TMyChildArray<T>.AddEnd();
      var elem:T;
      begin
        for elem in Fdata do
          elem.TestField:=0;
      end;
    

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多