我正在使用泛型來定義自己擁有通用列表的對象列表。我已經編寫了一種方法,使用基本上執行相同操作的特定方法來檢索每個列表的聚合。下面是結構:德爾福泛型方法
unit Unit1;
interface
uses
System.Generics.Collections;
type
TListType=(ltSType,ltFType);
TMyList<T> = class(TList<T>)
{Do some stuff in here to help load lists etc}
end;
TListObject=class(TObject)
private
FSList:TMyList<string>;
FIList:TMyList<integer>;
function GetSList: TMyList<string>;
function GetIList: TMyList<integer>;
public
property MySList:TMyList<string> read GetSList;
property MyIList:TMyList<integer> read GetIList;
constructor create;
end;
TListOfObject<T:TListObject> = class(TObjectList<T>)
public
Function AggrSList:TMyList<string>;
Function AggrIList:TMyList<integer>;
end;
implementation
{ TListObject }
constructor TListObject.create;
begin
FSList:=TMyList<string>.create;
FIList:=TMyList<integer>.create;
end;
function TListObject.GetIList: TMyList<integer>;
begin
result:=FIlist;
end;
function TListObject.GetSList: TMyList<string>;
begin
result:=FSList;
end;
{ TListOfObject<T> }
function TListOfObject<T>.AggrIList: TMyList<integer>;
var
i,j:integer;
begin
result:=TMyList<integer>.create;
for I := 0 to count-1 do
for j := 0 to items[i].MyIList.Count-1 do
result.Add(items[i].MyIList[j]);
end;
function TListOfObject<T>.AggrSList: TMyList<string>;
var
i,j:integer;
begin
result:=TMyList<string>.create;
for I := 0 to count-1 do
for j := 0 to items[i].MySList.Count-1 do
result.Add(items[i].MySList[j]);
end;
end.
我仍然相當新的仿製藥,但感覺總方法AggrIList和AggrSlist可以使用,使用一個單一的方法來提取數據,然後澆鑄在結果泛型來寫。
這是可能的,我將如何處理?我打算做一些更高級的功能,以便從這種方法中受益。
檢查文檔... http://docwiki.embarcadero.com/CodeExamples/XE7/en/Generics_Collections_TObjectList_(Delphi)。 你可以使用TObjectList,你不需要像在你的例子中那樣困難。 或者你可以使用簡單的TList與記錄... http://stackoverflow.com/questions/5797368/delphi-tlist-of-records。 –
smooty86
2015-03-31 06:40:28