陣列中的協變原則

2021-08-18 22:13:47 字數 665 閱讀 2913

根據lsp原則,我們可以知道子型別方法引數是逆變的,而子型別的返回值是協變的。

下面我想測試的是在陣列中所存在的協變原則

**如下:

public  class test

}

}

執行結果如下:

可以知道在陣列中可以存放子型別元素,由於integer和double均為number的子型別,故可以正確放入並且取出,滿足協變原則

再開下面的例子:

public  class test ;

number mynumber=myints;

mynuber[0]=3.14;

for(number n:mynumber)

}}

可以知道在子型別陣列中不能夠放入父型別的陣列,會在靜態型別檢查的時候就報錯

可以從以上的例子得到陣列中實際上是蘊含著協變原則的

c 協變和抗變 C 中協變與抗變(逆變)

泛型在.net 2.0中正式的引入。在使用泛型的過程中,聯絡上物件導向的繼承性。往往很容易想當然敲出類似以下 list animallst new list 顯然這樣編譯是不通過的。雖然dog和animal之間有繼承性,但是list和list這兩個類之間並沒有繼承性。如果要解決這樣的問題,用上協變與...

C 中的協變與抗變

using system using system.collections.generic using system.linq using system.text namespace csharp基礎 else console.readline 按照委託簽名,但返回的是子類的例項 public st...

C 中的協變和抗變

net4通過協變和抗變為泛型介面和泛型委託新增了乙個重要擴充套件。協變和抗變指對引數和返回值的型別進行轉換。在.net中,引數型別是協變的。假定有 shape和 rectangle 類,rectangle 派生自shape基類。宣告display 方法是為了接受 shape型別的物件作為其引數 pu...