我有以下定義。存儲匿名方法的容器
type
TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
我應該使用什麼類型的容器(應D2009支持)來存儲TOmniTaskDelegate實例的列表?目前我正在使用array of TOmniTaskDelegate
,但我對此並不滿意。
我有以下定義。存儲匿名方法的容器
type
TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
我應該使用什麼類型的容器(應D2009支持)來存儲TOmniTaskDelegate實例的列表?目前我正在使用array of TOmniTaskDelegate
,但我對此並不滿意。
我會使用TList<TOmniTaskDelegate>
。由於使用泛型會導致類型安全,因此它將正確處理其成員的生命期問題。
我在想Genericics.Collections中的'TList
TObjectList不是適當的容器,因爲匿名方法引用需要包含對方法的引用以及對接口「自我」的引用。換句話說,大小將是2 x SizeOf(指針)。 –
@Cosmin這只是一個愚蠢的錯誤,我的意思是'TList
編輯:德爾福2009年包含了一般TList<T>
,我認爲它的使用array of
實現的,就像一個在2010年德爾福這使得TList<T>
的最佳選擇!我的原始答案保留,因爲它解釋了爲什麼array of
是一個很好的數據結構,爲什麼不是使用它是一個很大的麻煩。
你選擇的array of Anonym
看起來對我很好,因爲:
如果你使用其他任何東西來實現,你需要照顧自己完成引用。例子:
在你的情況下,你正在實現一個基本類型(一種基本的新類型的列表),我不相信泛型和編譯器可以被信任而不會做一些可能會弄亂過程的東西引用。如果我打算使用除ProcRef數組以外的其他內容,那麼我將使用TList
'array of'對於列表的私有實現來說很好,但我絕不希望將它用作主數據類型。如果你不能使用'TList
爲什麼你不喜歡陣列? –
a)因爲我想將責任委託給一個定義良好的接口的容器,並且b)因爲我現在每次給它添加一些東西時就調整數組的大小。誠然,我可以寫一個很好的包裝陣列,它會知道當前的大小和分配的大小等,但是我已經重新實施TSomeList,我寧願使用Delphi提供的東西(假設存在這樣的東西)。 –
gabr
什麼是TSomeList?你不能只使用'TSomeList '嗎? –