|
在《上篇》中我們揭示了“缺省參數(shù)”的本質(zhì),現(xiàn)在我們接著來(lái)談?wù)凜#4.0中另一個(gè)重要的新特性:協(xié)變(Covariance)與逆變(Contravariance)。對(duì)于協(xié)變與逆變,大家肯定不會(huì)感到陌生,但是我相信有很多人不能很清晰地說(shuō)出他們之間的區(qū)別。我希望通過這篇文章能夠讓讀者更加深刻的認(rèn)識(shí)協(xié)變與逆變。但是也不排除另一種可能,那就是讀者這篇文章你對(duì)這兩個(gè)概念更加模糊。文章一些內(nèi)容僅代表個(gè)人觀點(diǎn),如有不妥,還望指正。
目錄
一、兩個(gè)概念:強(qiáng)類型與弱類型
二、委托中的協(xié)變與逆變的使用
三、接口中的協(xié)變與逆變的使用
四、從Func<T,TResult>看協(xié)變與逆變的本質(zhì)
五、逆變實(shí)現(xiàn)了“算法”的重用
一、兩個(gè)概念:強(qiáng)類型與弱類型
為了后面敘述方便,我現(xiàn)在這里自定義兩個(gè)概念:強(qiáng)類型和弱類型。在本篇文章中,強(qiáng)類型和弱類型指的是兩個(gè)具有直接或者間接繼承關(guān)系的兩個(gè)類。如果一個(gè)類是另一個(gè)類的直接或者間接基類,那么它為弱類型,直接或者間接子類為強(qiáng)類型。后續(xù)的介紹中會(huì)用到的兩個(gè)類Foo和Bar先定義在這里。Bar繼承自Foo。Foo是弱類型,而Bar則是強(qiáng)類型。
1: public class Foo
2: {
3: //Others Members...
4: }
5: public class Bar:Foo
6: {
7: //Others Members...
8: }
NET技術(shù):C#4.0新特性-&quot;協(xié)變&quot;與&quot;逆變&quot;以及背后的編程思想,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。