不需要引用其他單元檔案,
如果用泛型列表tlist或 字典tdictionary時需要引用:system.generics.collections
unitunit1;
inte***ce
uses
system.classes;
type
a = class
//一般類
end;
b = class
(a) //一般繼承
end; gb
= class(a) //
繼承於a的泛型類
end;
gc =class(gb)//
繼承於gb並指定t為 string的類 //值型別
end;
gd =class(gb)//
繼承於gb並指定t為 tstringlist的類 //引用型別
end;
ge=class(gb) //
繼承於gb並指定t為 a的類 ;是自己的祖先類也可以嗎?
end;
//-------------
ghconstructor> =class
//乙個直接的泛型類 t限定為a類 或a的子類
end;
j =class(gh)
end; k =class(gh)
end;//
l =class(gh) //會出錯,因為 gh的型別限定 a或a的子類
泛型方法不一定寫在泛型類裡面
//方法體裡面用到t,這裡有疑問 ?? 這個t應該從**傳進去??
end;
end.
unit system.sysutils; //單元中有定義下面的泛型方法 型別
//generic anonymous method declarations
type
tproc = reference to
procedure
; tproc
= reference to
procedure
(arg1: t);
tproc
= reference to
procedure
(arg1: t1; arg2: t2);
//----------以下應用 :用到兩個 佔位符,
class
procedure runonuithread(proc: tproc; arg1: t1;
arg2: t2);
overload
;
class
procedure ttask.runonuithread(proc: tproc; arg1: t1;
arg2: t2);
begin
synchronize(tthread.currentthread,
procedure
()
begin
proc(arg1, arg2);
end);
end;
上面用到兩個 佔位符,通過 runonuithread()引數傳進去,並且前面要標明用到的 佔位符,
這個方法有點特殊,傳了乙個方法 proc: tproc進去
泛型 泛型類的定義
泛型的定義與普通類定義相比,首先在類名後增加了由尖括號標識的型別變數,一般用t表示。t可以在泛型中的任何地方使用。對於泛化介面也是這樣定義。我們來看看普通類box以及box的泛型的 1 普通類box的定義 public class mybox public object get 2 box類的泛型定...
定義泛型類
前言 要建立泛型類,只需在類定義中包含尖括號語法。其中t可以是任意識別符號,只要遵循通常的c 命名規則即可,例如不以數字開頭等。泛型類可以在其定義中包含任意多個型別,它們用逗號分隔開。定義了這些型別之後,就可以在類定義中像使用其他型別那樣使用它們。可以把它們用作成員變數的型別 屬性或方法等成員的返回...
泛型類介面定義
在使用泛型定義類的過程中遇到了不少問題,特記錄如下 定義最基本的泛型類如下 其實最簡單的只需要新增,就表示泛型類了,可在使用的過程中 pl.datalist new list 總是提示錯誤,編譯不通過,說是必須是類才可以,於是修改如下 public abstract class getdatabas...