快速導(dǎo)航
六、 體驗泛型數(shù)組
七、
體驗泛型方法
八、
體驗自定義泛型類
九、 體驗泛型約束條件
1、 類類型約束條件
2、 對象類型約束條件
4、 值類型約束條件
5、 多約束條件
6、 多模板類型分別約束條件7、 嵌套約束條件
十一、
總結(jié)
由于正式版還沒有發(fā)出,官方的幫助文檔也沒有泄露,所以我沒有辦法驗證
Delphi
對泛型的支持到何種程度了。大家對泛型都很熟悉,具體細節(jié)我就不多說了。下面將貼出一些代碼,用來驗證
Delphi
對泛型的支持并驗證是否通過。
六、體驗泛型數(shù)組

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

八、體驗自定義泛型類

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

九、體驗泛型約束條件
以下通過代碼針對泛型類,對Delphi2009所支持的泛型約束條件進行驗證。
1、類類型約束條件
約束模板類型T只能為類類型

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

2、對象類型約束條件
約束T只能為某一個對象類型

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

3、構(gòu)造函數(shù)約束條件
大家都知道,在C#中,可以使用 T: where new() 對泛型模板類型進行構(gòu)造函數(shù)的約束,指明 類型T 必須有一個可見的構(gòu)造函數(shù)。
在D2009中,我也發(fā)現(xiàn)有這樣的特性:

2

3

4

約束“: constructor”表明T必須擁有可見的構(gòu)造函數(shù)。
但是,我在使用以下代碼時,編譯器總是提示編譯不通過:

2

3

4

5

獲取是另外一種寫法?我沒有嘗試出來,需要等官方正式版出來才能確認。
4、值類型約束條件
Delphi2009的泛型約束不提供值類型約束條件,TGenericsClass1<T: Integer> = class這樣的約束編譯器是不支持的。所以,像c++中template <Tint S> class TBuf這樣的約束在Delphi中行不通。
5、多約束條件
與C#類似,Delphi2009的多約束條件用來約束T既滿足一個類型,又滿足一個接口。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

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

2

3

4

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

2

3

4

5

6

7

8

十、關(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更強大)的支持。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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