根據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...