九、體驗泛型約束條件
以下通過代碼針對泛型類,對Delphi2009所支持的泛型約束條件進行驗證。
1、類類型約束條件
約束模板類型T只能為類類型
1program TestGenericClass;
2
3{$APPTYPE CONSOLE}
4
5uses
6 SysUtils;
7
8type
9 TGenericsClass1<T: class> = class // 注意在此進行約束
10 private
11 fValue: T;
12 public
13 constructor Create(aValue: T); virtual;
14 property Value: T read fValue write fValue;
15 end;
16
17var
18 gc1: TGenericsClass1<TObject>;
19
20{ TGenericsClass1<T> }
21
22constructor TGenericsClass1<T>.Create(aValue: T);
23begin
24 fValue := aValue;
25end;
26
27begin
28 gc1 := TGenericsClass1<TObject>.Create(nil);
29 Writeln(gc1.Value = nil);
30 FreeAndNil(gc1);
31
32 Readln;
33end.
2、對象類型約束條件
約束T只能為某一個對象類型
1program TestGenericArray;
2
3{$APPTYPE CONSOLE}
4
5uses
6 SysUtils,
7 Classes,
8 Contnrs;
9
10type
11 TGenericsClass1<T: TList> = class // 注意在此進行約束
12 private
13 fValue: T;
14 public
15 constructor Create(aValue: T); virtual;
16 property Value: T read fValue write fValue;
17 end;
18
19var
20 gc1: TGenericsClass1<TObjectList>;
21
22{ TGenericsClass1<T> }
23
24constructor TGenericsClass1<T>.Create(aValue: T);
25begin
26 fValue := aValue;
27end;
28
29begin
30 gc1 := TGenericsClass1<TObjectList>.Create(nil);
31 Writeln(gc1.Value = nil);
32 FreeAndNil(gc1);
33
34 Readln;
35end.