泛型的使用

2021-06-20 06:57:01 字數 4877 閱讀 1931

unit

unit1;

inte***ce

uses

winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics,

vcl.controls, vcl.forms, vcl.dialogs;

type

tform1 =

class

(tform)

procedure

formcreate(sender: tobject);

end;  tarr=

class

class

procedure

arrayadd(

var arr: tarray;

const

item: t);

end;var

form1: tform1;

implementation

class

procedure

tarr.arrayadd(

var arr: tarray;

const

item: t);

begin

setlength(arr, length(arr)+1);

arr[high(arr)] := item;

end;

//測試

procedure

tform1.formcreate(sender: tobject);

var  arr1: tarray<

string

>;

arr2: tarray;

begin

tarr<

string

>.arrayadd(arr1,

'abc'

);  tarr.arrayadd(arr2,

123);

showmessagefmt(

'%s,%d'

, [arr1[

0], arr2[

0]]); //abc,123

end;

end.

二、使用泛型結構:

unit

unit1;

inte***ce

uses

winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics,

vcl.controls, vcl.forms, vcl.dialogs;

type

tform1 =

class

(tform)

procedure

formcreate(sender: tobject);

end;  tarr=

record

//record

class

procedure

arrayadd(

var arr: tarray;

const

item: t);

static

; //結構中的 class 方法必須是 static 的

end;var

form1: tform1;

implementation

class

procedure

tarr.arrayadd(

var arr: tarray;

const

item: t);

begin

setlength(arr, length(arr)+1);

arr[high(arr)] := item;

end;

//測試

procedure

tform1.formcreate(sender: tobject);

var  arr1: tarray<

string

>;

arr2: tarray;

begin

tarr<

string

>.arrayadd(arr1,

'abc'

);  tarr.arrayadd(arr2,

123);

showmessagefmt(

'%s,%d'

, [arr1[

0], arr2[

0]]); //abc,123

end;

end.

三、在類或結構中建立泛型方法:

unit

unit1;

inte***ce

uses

winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics,

vcl.controls, vcl.forms, vcl.dialogs;

type

tform1 =

class

(tform)

procedure

formcreate(sender: tobject);

end;  tarr =

record

class

procedure

arrayadd(

var arr: tarray;

const

item: t);

static; 

end;

var  form1: tform1;

implementation

class

procedure

tarr.arrayadd(

var arr: tarray;

const

item: t);

begin

setlength(arr, length(arr)+1);

arr[high(arr)] := item;

end;

//測試

procedure

tform1.formcreate(sender: tobject);

var  arr1: tarray<

string

>;

arr2: tarray;

begin

tarr.arrayadd<

string

>(arr1,

'abc'

);  tarr.arrayadd(arr2,

123);

showmessagefmt(

'%s,%d'

, [arr1[

0], arr2[

0]]); //abc,123

end;

end.

四、擴充 system.generics.collections 單元中的 tarray 類:

unit

unit1;

inte***ce

uses

winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics,

vcl.controls, vcl.forms, vcl.dialogs, system.generics.collections;

type

tform1 =

class

(tform)

procedure

formcreate(sender: tobject);

end;  t*** =

class

helper

for tarray

class

procedure

arrayadd(

var arr: tarray;

const

item: t);

static; 

end;

var  form1: tform1;

implementation

class

procedure

t***.arrayadd(

var arr: tarray;

const

item: t);

begin

setlength(arr, length(arr)+1);

arr[high(arr)] := item;

end;

//測試

procedure

tform1.formcreate(sender: tobject);

var  arr1: tarray<

string

>;

arr2: tarray;

begin

tarray.arrayadd<

string

>(arr1,

'abc'

);  tarray.arrayadd(arr2,

123);

showmessagefmt(

'%s,%d'

, [arr1[

0], arr2[

0]]); //abc,123

end;

end.

總結:1、delphi 的泛型方法只能屬於乙個類或結構, 這是好事, 也應該是 delphi 所提倡的; 這便於管理、也便於快速輸入.

2、稍稍擴充一下就可讓動態陣列和其它強大的列表模擬拼一下了.

3、這也像是 c++ 中的演算法了, 按這個思路應該可以把許多 c++ 中的演算法移植過來.

泛型的使用

泛型是什麼,為什麼使用泛型 泛型是指宣告時不指定型別,使用時指定型別,用編譯時用來宣告型別,使用時指定型別。這就意味著意味著編寫的 可以被不同型別的物件所重用。在集合中如果使用object型別,那麼在使用過程中我們需要進行強制轉換型別,並且在編譯過程中不能夠進行型別轉換檢查異常。這樣就會容易在執行過...

泛型的使用

目前這個專案使用的jsp servlet j abean,沒有使用其它的框架。在處理資料庫的時候,多張表就對應多個dao,而每個dao都有增刪改查的方法,顯得很冗餘。於是寫了乙個commondao,其中包含了其他dao裡面共有的一些方法。然後讓其他的dao類繼承commondao,servlet中直...

泛型的使用

型別引數t 泛型的型別引數t可以看作是乙個佔位符,它不是一種型別,它僅代表了某種可能的型別。型別引數t可以在使用時用任何型別來代替。型別引數t的命名準則如下 使用描述性名稱命名泛型型別引數,除非單個字母名稱完全可以讓人了解它表示的含義,而描述性名稱不會有更多的意義。public inte ce is...