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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

七、體驗(yàn)泛型方法
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

八、體驗(yàn)自定義泛型類

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

九、體驗(yàn)泛型約束條件
以下通過(guò)代碼針對(duì)泛型類,對(duì)Delphi2009所支持的泛型約束條件進(jìn)行驗(yàn)證。
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、對(duì)象類型約束條件
約束T只能為某一個(gè)對(duì)象類型

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() 對(duì)泛型模板類型進(jìn)行構(gòu)造函數(shù)的約束,指明 類型T 必須有一個(gè)可見的構(gòu)造函數(shù)。
在D2009中,我也發(fā)現(xiàn)有這樣的特性:

2

3

4

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

2

3

4

5

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

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、多模板類型分別約束條件
有兩個(gè)模板類型T1、T2,要使用不同的約束分別約束兩個(gè)模板類型,可以使用以下方法:

2

3

4

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

2

3

4

5

6

7

8

十、關(guān)于特化和偏特化
謝謝網(wǎng)友“ 裝配腦袋” 的提醒,我試了很多方法,都沒有跡象表明D2009支持C++中模板的特化和偏特化,或者D2009用其他形式的語(yǔ)法表示特化與偏特化,導(dǎo)致我沒有試驗(yàn)出來(lái)。
十一、總結(jié)
總體上來(lái)說(shuō),D2009從泛型的角度出發(fā),做得已經(jīng)非常不錯(cuò)了,已經(jīng)非常接近C#。甚至,D2009還提供類似于C#的關(guān)鍵字“default”,來(lái)獲取泛型類型T的默認(rèn)值(值類型置0,引用類型為空指針)。
在接下來(lái)的章節(jié)里,我會(huì)向大家介紹D2009的其他新體驗(yàn),如:匿名函數(shù)和反射(比RTTI更強(qiáng)大)的支持。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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