欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Delphi2009初體驗 - 語言篇 - 體驗泛型(二)

系統(tǒng) 1834 0

快速導(dǎo)航

六、 體驗泛型數(shù)組

七、 體驗泛型方法

八、 體驗自定義泛型類

九、 體驗泛型約束條件

1、 類類型約束條件

2、 對象類型約束條件

3、 構(gòu)造函數(shù)約束條件

4、 值類型約束條件

5、 多約束條件
6、 多模板類型分別約束條件

7、 嵌套約束條件

十、 關(guān)于特化與偏特化

十一、 總結(jié)


由于正式版還沒有發(fā)出,官方的幫助文檔也沒有泄露,所以我沒有辦法驗證 Delphi 對泛型的支持到何種程度了。大家對泛型都很熟悉,具體細節(jié)我就不多說了。下面將貼出一些代碼,用來驗證 Delphi 對泛型的支持并驗證是否通過。

六、體驗泛型數(shù)組

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericArray;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils;
7
8 type
9 TArr < T > = array of T;
10
11 var
12 arr:TArr < Integer > ;
13 n:Integer;
14 begin
15 Setlength(arr, 10 );
16
17 for n: = 0 to 9 do
18 begin
19 arr[n]: = n;
20 end ;
21 end .
22

七、體驗泛型方法

1、Delphi2009不支持全局泛型方法,泛型方法只能置于類內(nèi)或者嵌套在方法內(nèi),或者成為類的靜態(tài)方法。
2、以下代碼將打印出傳入泛型變量的地址:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericArray;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils;
7
8 type
9 TGeneric = class
10 class procedure PrintAddress < T > (aVal:T);
11 end ;
12
13 var
14 n:Integer;
15
16 { TGeneric }
17
18 class procedure TGeneric.PrintAddress < T > (aVal:T);
19 begin
20 Writeln(Integer(@aVal));
21 end ;
22
23 begin
24 n: = 10 ;
25 TGeneric.PrintAddress < Integer > (n);
26 end .

Delphi2009初體驗 - 語言篇 - 體驗泛型(二)

八、體驗自定義泛型類

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericClass;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils;
7
8 type
9 TGenericsClass1 < T > = 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
17 var
18 gc1:TGenericsClass1 < Integer > ;
19
20 { TGenericsClass1<T> }
21
22 constructor TGenericsClass1 < T > .Create(aValue:T);
23 begin
24 fValue: = aValue;
25 end ;
26
27 begin
28 gc1: = TGenericsClass1 < Integer > .Create( 10 );
29 Writeln(gc1.Value);
30 FreeAndNil(gc1);
31
32 Readln;
33 end .

Delphi2009初體驗 - 語言篇 - 體驗泛型(二)

九、體驗泛型約束條件

以下通過代碼針對泛型類,對Delphi2009所支持的泛型約束條件進行驗證。

1、類類型約束條件

約束模板類型T只能為類類型

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericClass;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils;
7
8 type
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
17 var
18 gc1:TGenericsClass1 < TObject > ;
19
20 { TGenericsClass1<T> }
21
22 constructor TGenericsClass1 < T > .Create(aValue:T);
23 begin
24 fValue: = aValue;
25 end ;
26
27 begin
28 gc1: = TGenericsClass1 < TObject > .Create( nil );
29 Writeln(gc1.Value = nil );
30 FreeAndNil(gc1);
31
32 Readln;
33 end .

2、對象類型約束條件

約束T只能為某一個對象類型

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericArray;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils,
7 Classes,
8 Contnrs;
9
10 type
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
19 var
20 gc1:TGenericsClass1 < TObjectList > ;
21
22 { TGenericsClass1<T> }
23
24 constructor TGenericsClass1 < T > .Create(aValue:T);
25 begin
26 fValue: = aValue;
27 end ;
28
29 begin
30 gc1: = TGenericsClass1 < TObjectList > .Create( nil );
31 Writeln(gc1.Value = nil );
32 FreeAndNil(gc1);
33
34 Readln;
35 end .

3、構(gòu)造函數(shù)約束條件

大家都知道,在C#中,可以使用 T: where new() 對泛型模板類型進行構(gòu)造函數(shù)的約束,指明 類型T 必須有一個可見的構(gòu)造函數(shù)。

在D2009中,我也發(fā)現(xiàn)有這樣的特性:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 TGeneric < T: constructor > = class
2 public
3 constructor Create; virtual ;
4 end ;

約束“: constructor”表明T必須擁有可見的構(gòu)造函數(shù)。

但是,我在使用以下代碼時,編譯器總是提示編譯不通過:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 var
2 t:T;
3 begin
4 t: = T.Create;
5 end ;

獲取是另外一種寫法?我沒有嘗試出來,需要等官方正式版出來才能確認。

4、值類型約束條件

Delphi2009的泛型約束不提供值類型約束條件,TGenericsClass1<T: Integer> = class這樣的約束編譯器是不支持的。所以,像c++中template <Tint S> class TBuf這樣的約束在Delphi中行不通。

5、多約束條件

與C#類似,Delphi2009的多約束條件用來約束T既滿足一個類型,又滿足一個接口。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 program TestGenericArray;
2
3 { $APPTYPECONSOLE }
4
5 uses
6 SysUtils,
7 Classes,
8 Windows,
9 Contnrs;
10
11 type
12 IInt = Interface
13 procedure Test;
14 End;
15
16 TImp = class (TInterfacedObject,IInt)
17 public
18 procedure Test;
19 end ;
20
21 TGenericsClass < T: class ,IInt > = class // 注意在此進行約束
22 private
23 fValue:T;
24 public
25 constructor Create(aValue:T); virtual ;
26 property Value:T read fValue write fValue;
27 end ;
28
29 var
30 gc1:TGenericsClass < TImp > ;
31
32 { TGenericsClass<T> }
33
34 constructor TGenericsClass < T > .Create(aValue:T);
35 begin
36 fValue: = aValue;
37 end ;
38
39 { TImp }
40
41 procedure TImp.Test;
42 begin
43
44 end ;
45
46 begin
47 gc1: = TGenericsClass < TImp > .Create( nil );
48 Writeln(gc1.Value = nil );
49 FreeAndNil(gc1);
50
51 Readln;
52 end .

6、多模板類型分別約束條件

有兩個模板類型T1、T2,要使用不同的約束分別約束兩個模板類型,可以使用以下方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 type
2 TGenericsClass < T: class ;T1:TList > = class // 注意在此進行約束,用“;”將兩個模板類型分開進行分別約束
3 private
4 end ;

7、嵌套約束條件

Delphi2009的泛型約束條件對嵌套約束條件處理的很好,如:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 TFelix < T > = class
2 public
3
4 end ;
5
6 TGenericsClass < T: class ;T1:TFelix < T >> = class // 注意在此進行約束,用“;”將兩個模板類型分開進行分別約束
7 private
8 end ;

十、關(guān)于特化和偏特化

謝謝網(wǎng)友“ 裝配腦袋” 的提醒,我試了很多方法,都沒有跡象表明D2009支持C++中模板的特化和偏特化,或者D2009用其他形式的語法表示特化與偏特化,導(dǎo)致我沒有試驗出來。

十一、總結(jié)

總體上來說,D2009從泛型的角度出發(fā),做得已經(jīng)非常不錯了,已經(jīng)非常接近C#。甚至,D2009還提供類似于C#的關(guān)鍵字“default”,來獲取泛型類型T的默認值(值類型置0,引用類型為空指針)。

在接下來的章節(jié)里,我會向大家介紹D2009的其他新體驗,如:匿名函數(shù)和反射(比RTTI更強大)的支持。

Delphi2009初體驗 - 語言篇 - 體驗泛型(二)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中国美女撒尿txxxxx视频 | 青青久操视频 | 2021国产精品自拍 | 免费人成又黄又爽的视频强 | 欧美午夜一区 | 久久在线中文字幕 | 机器人男友 | 免费大片黄在线观看 | 亚洲精品乱码久久久久久蜜桃 | 九草在线视频 | 一级做性色a爰片久久毛片 亚洲午夜精品久久久久久app | 亚洲一区二区三区视频 | 久草福利站| 国产精品资源在线观看网站 | 深夜影院老司机69影院 | 亚洲一区图片 | 日本久久精品 | 亚洲欧美精品 | 亚洲激情视频 | 中文字幕a∨在线乱码免费看 | 免费观看欧美一级片 | 午夜性电影 | 国产中文字幕在线观看 | 久草网在线 | 高清国产激情视频在线观看 | 亚洲毛片在线观看 | 久久夜色精品国产亚洲噜噜 | 好男人www. | 亚洲一级在线观看 | 亚洲高清视频一区 | www操操| 天天色综合5| 成人 在线 | 国产成人精品福利色多多 | 国产成人av在线播放 | 免费高清伧理片午夜伧理片 | 欧美电影在线观看网站 | 91视频网页版 | 天天鲁天天爽天天视频 | 免费国产一区 | 欧洲一级毛片 |