1

TypeIdentifier をクラス型に変換するにはどうすればよいですか? 暗黙の変換を使用する必要があります。

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;」で「無効な型キャスト」が発生します。

私が使用したい原則は、TypeIdentifier が TTypeIdenitifierParentClass から派生したクラスを表すということです。多くのクラス タイプがありますが、それらはすべてそのクラスを継承しています。

どうすればいいですか?

4

1 に答える 1

2

Delphi がキャストについて不平を言っている理由は、T を「TTypeIdenitifierParentClass」に型キャストできるかどうかをコンパイラが知る方法がないためです。T を「TTypeIdentifierParentClass」から派生するクラスに制限する必要があります。

以下を試してください

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;
于 2010-04-18T12:26:22.090 に答える