泛型 (Generic) 是程式毒藥還是解藥? 圖片來源 |
在Delphi 2009開始便加入了【泛型容器】相關類別,如下所列:
- TList
,TObjectList - TQueue
,TObjectQueue - TStack
,TObjectStack - TDictionary
,TObjectDictionary
不過也只知道可以放像是「string, Integer, TComponent」等,基本型別或是物件都可以自由宣告使用。
乍看下和 TStringList 重疊率很高啊,如果是宣告TList
- CommaText
- DelimitedText
不能用這兩個常用率特高的函式感覺很廢啊。泛型容器到底有什麼好用的?
一直到需要放置物件時,才開始覺得泛型容器超好用。
以往設計放置物件的容器時,大致上會這麼寫:
- Array of TComponent
- TStringList
Array of TComponent:
除了SetLength外,還要自己做釋放物件的工作,有夠麻煩。
TStringList:
TStringList也可以放物件?
有的,可以這麼寫
函式如下:
function AddObject(const S: string; AObject: TObject): Integer; override;
就可以利用函式裡的【TObject】來存放基本型別或是任何物件。
只是取出還得用 IndexOf和物件轉型就很麻煩,比方說:
if PersonList.IndexOf('Mary') > 0 then
TPerson(PersonList.Object(PersonList.indexOf('Mary')));
你不累嗎?看得都累了……
這時泛型物件可以這樣寫:
var PersonList: TObjectList<TPerson> begin PersonList:= TObjectList<TPerson>.Create; PersonList.Add(TPerson.Create); PersonList[0].Name := 'Mary'; FreeAndNil(PersonList); end;
不用轉型,程式碼方便易懂。您說是吧! ^ ^
沒有留言:
張貼留言