任意のインターフェイス タイプ ( /を除く)TList<T>
であるジェネリックの使用が危険であるかどうか疑問に思っています。私はインターフェースを多用しており、それらをリストに保存しています。一部のインターフェイスは私自身のものであり、一部は一部の COM インターフェイスによって提供されるため、COM が関与しています。T
IUnknown
IInterface
インスタンスの等価性のチェックが発生する潜在的な問題が見られます。たとえばRemove
、リストのメソッドを使用する場合です (これは、提供された値と含まれる値を内部的に比較する必要があります)。COM ルールによると、2 つのインターフェイスを にキャストした後にのみ、それらが等しいかどうかを比較できますIUnknown
。でインターフェイスを見つけることに関与するデフォルトのコンパレーターがそれを認識しているかどうかはわかりませんTList<T>
。
私の質問を例で説明するには:
var
list:TList<IMyInterface>;
intf:IMyInterface;
begin
...
list:=TList<IMyInterface>.Create;
list.Add(intf);
...
list.Remove(intf);
end;
上記のコードは正当ですか?