日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

 

首先協(xié)變(Covariance)和逆變(contravariance),這倆概念不是TS特有的,很多有類型系統(tǒng)的語(yǔ)言都有一樣的概念,比如C#,JAVA等。要理解這兩個(gè)概念,讓我們先建立幾個(gè)類,然后再詳細(xì)說(shuō)明,如下:

 

代碼很直觀,建立了3個(gè)類,動(dòng)物,狗,黃狗,它們之間的繼承關(guān)系是,動(dòng)物(Animal)類是基類,狗(Dog)繼承自動(dòng)物類,黃狗(YellowDog)繼承自狗類。Animal <- Dog <- YellowDog 它們每個(gè)類都有各自特有的屬性。

接下來(lái),我們來(lái)為每個(gè)類創(chuàng)建一個(gè)實(shí)例對(duì)象:

 

協(xié)變(Covariance)

根據(jù)微軟的解釋:協(xié)變是使您能夠使用比最初指定更多的派生類型。這是什么意思?其實(shí)就是指,派生類型的值可以安全的賦給基類型(繼承自的類型),而反過(guò)來(lái)就不行。

比如本例中,黃狗的實(shí)例,就可以賦值給類型為狗或動(dòng)物的變量,狗的實(shí)例可以賦值給動(dòng)物類型的變量,但反過(guò)來(lái),狗的實(shí)例,就不可以賦值給黃狗類型的變量,如下:

 

我覺(jué)得這也可以理解,因?yàn)檫@樣的賦值是安全的。屬性多的實(shí)例,賦值給屬性少的類型,不會(huì)丟失數(shù)據(jù)。黃狗類包含了動(dòng)物類所有的成員,所以當(dāng)黃狗對(duì)象賦值給動(dòng)物類型時(shí),動(dòng)物類型的每個(gè)字段屬性都可以被正常賦值,如果反過(guò)來(lái),用動(dòng)物實(shí)例對(duì)象給黃狗類型賦值,那動(dòng)物對(duì)象中就不存在黃狗對(duì)象所需要的字段,視為不安全賦值,所以編譯報(bào)錯(cuò)。

逆變(contravariance)

也是根據(jù)微軟的解釋:跟協(xié)變正好相反,逆變使您能夠使用比最初指定的更通用(較少派生)的類型。

這通常發(fā)生在函數(shù)類型的參數(shù)中,看下面的代碼:

 

我們定義了三個(gè)函數(shù)類型,然后為每個(gè)函數(shù)類型定義了一個(gè)函數(shù)的實(shí)例。

 

接下來(lái),我們定義了一個(gè)函數(shù),它的參數(shù)是一個(gè)FuncDog的函數(shù)類型。讓我們看看把每個(gè)函數(shù)傳進(jìn)來(lái)會(huì)有什么結(jié)果,

 

現(xiàn)在反而是 funYellowDog 參數(shù)報(bào)錯(cuò)了,因?yàn)樗抢^承自Dog,跟協(xié)變相反,所以它會(huì)報(bào)錯(cuò)。那要怎么理解這個(gè)呢?為啥會(huì)這樣,我是這么理解的,

讓我們改一下這個(gè)函數(shù),讓它做點(diǎn)事:

 

因?yàn)閭魅氲暮瘮?shù)參數(shù)終究還是要被調(diào)用的,按理它是需要一個(gè)狗的對(duì)象,所以我們實(shí)例化一個(gè)dog對(duì)象,然后調(diào)用 func(dog) ,這時(shí)如果使用 FuncAnimal 類型的函數(shù),沒(méi)有問(wèn)題,因?yàn)樗枰膮?shù)是 Animal 類型,所以dog可以賦值給它。正好又符合了協(xié)變。

但如果這里允許傳入 FuncYellowDog 類型的函數(shù),那當(dāng)它調(diào)用的時(shí)候,dog就想當(dāng)于要賦值給 YellowDog 類型的變量,這就又是不安全的賦值。跟協(xié)變里面的錯(cuò)誤是一樣的。所以就禁止這樣做了。

總結(jié)

這里有點(diǎn)饒啊,最好大家可以自己上手試試,我覺(jué)得可以想明白的。感謝閱讀,發(fā)現(xiàn)錯(cuò)誤請(qǐng)指正。

分享到:
標(biāo)簽:Typescript
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定