TMyDataList<T: TBaseDatafile, constructor> = class(TObjectList<TBaseDatafile>)
public
constructor Create;
procedure upload(db: TDataSet);
end;
ブログの投稿 (どこにあるか覚えていません) で、これがジェネリック オブジェクトの特定の基本型を持つジェネリック ベースのクラスを宣言する方法であると読みました。そして、コンパイラはそれを問題なく受け入れます。でも使おうとすると協力してくれない。
type
TDescendantList = TMyDataList<TDescendantDatafile>;
これにより、コンパイラ エラーが発生します。
[DCC エラー] my_database.pas(1145): E2010 互換性のない型: 'TDescendantDatafile' および 'TBaseDatafile'
問題は、1145 は有効な回線でさえないということです。問題のファイルは #1142 で終わり、問題の型宣言は #20 行にあります。これは、コンパイラの不具合ではないかと思います。それとも、構文が正しくないだけですか?これを機能させる方法を知っている人はいますか?
編集: Jim は、試してみると問題なくコンパイルできると指摘しました。もう少し情報: 基本データファイル型と汎用リストは同じユニットで宣言されていますが、TDescendantDatafile は 2 番目のユニットにあり、TDescendantList は 3 番目のユニットに定義されています。私はすでに D2009 のコンパイラで、ジェネリックが複数のユニットにまたがって型をめちゃくちゃにするバグを発見し、報告しました。これは関連している可能性があります。誰でもこれを確認できますか?