アイテムのコレクションをTCollectionに保存することを計画しています。
各アイテムは派生しTBaseItem
、TCollectionItemから派生します。
これを念頭に置いてTBaseItem
、アイテムが要求されたときにコレクションが返されます。
これで、それぞれTBaseItem
にCalculate
関数が作成されます。TBaseItem
これでは、内部変数が返されるだけですが、TBaseItem
関数の各派生でCalculate
は、異なるパラメーターのセットが必要です。
コレクションにはCalculate All
、コレクションアイテムを繰り返し処理して各Calculate
関数を呼び出す関数があります。明らかに、各関数に正しいパラメーターを渡す必要があります。
これを行うには、次の3つの方法が考えられます。
基本クラスの計算関数ごとに仮想/抽象メソッドを作成し、派生クラスでオーバーライドします。これは、オブジェクトを使用するときに型キャストが不要であることを意味しますが、多くの仮想メソッドを作成し、大きなif...elseステートメントが型を検出し、正しい「calculate」メソッドを呼び出す場合、コードを記述するときに、どの型をどの型に対して呼び出すかを知る必要があるため、calculateメソッドを呼び出すとエラーが発生しやすくなります。 Error/EAbstractErrorを回避するためにパラメータを修正してください。
で可能なすべてのパラメーターを使用してレコード構造を作成し、これを「計算」機能のパラメーターとして使用します。これには、必要なすべてのパラメーターを含めることができ、潜在的に非常に長いパラメーターリストを回避できるため、これを「すべて計算」関数に渡すという追加の利点があります。
TBaseItemを型キャストするだけで、正しいcalculateメソッドにアクセスできます。これにより、最初のメソッドと比較して、TBaseItemがかなり整理されます。
このコレクションを処理するための最良の方法は何でしょうか?