delphi 泛型使用很是折騰,和c++的差得太遠。特別是類模板的使用,建立很是麻煩,還好可以變通的寫出來。
以下舉個例子,如何使用類模板。
unit test1;
inte***ce
uses
winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics, vcl.controls, vcl.forms,
vcl.dialogs, generics.collections, vcl.stdctrls, vcl.buttons;
type
tform4 = class(tform)
btn1: tbitbtn;
procedure btn1click(sender: tobject);
private
public
end;
tvalue = class //基類
public
function name: string; virtual; //虛方法
end;
tvalue1= class(tvalue)
public
function name: string; override; //覆蓋基類虛方法
end;
ttest = class
public
procedure method; //測試方法1,用基類做模板型別,可以傳入任意子類
procedure method2; //測試方法2,用class關鍵字,可以傳入任意類
end;
var form4: tform4;
implementation
function tvalue.name: string;
begin
result:= 'value_base';
end;
function tvalue1.name: string;
begin
result:= '1_' + inherited name; //'value_1';
end;
procedure ttest.method2;
var value: t;
begin
value:= t(tclass(t).create); //用tclass把型別強轉,然後才能呼叫到create方法,
//最後用t強轉回來,是不是很折騰,而不能直接寫t.create ???
showmessage((value as tvalue).name); //這裡用as強轉為某個類,才能呼叫到類的方法
value.free;
end;
procedure ttest.method;
var value: t;
begin
value:= t(tclass(t).create);
showmessage(value.name); //這裡由於有型別定義,可以直接呼叫,不用as強轉
value.free;
end;
procedure tform4.btn1click(sender: tobject);
var t1: ttest;
begin
t1:= ttest.create;
t1.method; //value_base
t1.method; //1_value_base
t1.method; //value_base
t1.method2; //1_value_base
end;
泛型之泛型類
public class a 構造引數型別上使用泛型 public a t t 方法返回值上使用泛型 public t gett 方法的引數上使用泛型 這是泛型類的方法,而不是泛型方法 public void sett t t 方法的返回值和引數型別上使用泛型 public t foo t t pu...
泛型之泛型類
public class a 構造引數型別上使用泛型 public a t t 方法返回值上使用泛型 public t gett 方法的引數上使用泛型 這是泛型類的方法,而不是泛型方法 public void sett t t 方法的返回值和引數型別上使用泛型 public t foo t t pu...
泛型之泛型類
public class a 構造引數型別上使用泛型 public a t t 方法返回值上使用泛型 public t gett 方法的引數上使用泛型 這是泛型類的方法,而不是泛型方法 public void sett t t 方法的返回值和引數型別上使用泛型 public t foo t t pu...