關於協變和逆變已經有很多園友談論過了,學習時也參考過園友們的文章,非常之到位!尤其是園友lovejenny的,參看時自己也有敲**加理解,但是出現乙個問題,甚是不解,請看下面。【注】這個問題可能對您而言很簡單,若有解釋,請告知,在此感謝。高手繞道!
既然是標題是協變和逆變,還是先給個公認的msdn概念吧。說完概念直接進入問題區。
1public
class
employee25
6public
class
programmer : employee
7
1inte***ce isalary26
7public
class basesalarycounter: isalary8
1314
public
void
otherpay(t t)
1518 }
isalarypro = new basesalarycounter();毫無疑問出現錯誤,如下:【注】若不明白錯誤原因請參考園友lovejenny文章isalary
emp = pro;
/*定義介面*/2
public
inte***ce imycomparable36
/*employee為基類並實現其介面*/7
public
class employee : imycomparable8
10public
intcompare(employee other)
1114}15
16/*
programmer繼承employee並實現其介面
*/17
public
class programmer : employee, imycomparable1824}
2526
/*manager繼承employee
*/27
public
class
manager : employee
2831
32/*
定義方法
*/33
34static
void test(imycomparablet1, t t2)
3538
39/*
呼叫*/
4041 programmer p = new programmer() ;
42 manager m = new manager() ;
43 test(p, m);
協變和逆變
協變和逆變都是術語,前者指能夠使用比原始指定的派生型別的派生程度更大的型別,後者指能夠使用比原始指定的派生型別的派生程度更小的型別。using system using system.collections.generic using system.text class derived base s...
協變和逆變
二 真正的協變和逆變 概念 1 以前的泛型系統 或者說沒有in out關鍵字時 是不能 變 的,無論是 逆 還是 順 協 2 當前僅支援介面和委託的逆變與協變 不支援類和方法。但陣列也有協變性。3 值型別不參與逆變與協變。協變 foo foo public class testoutwhere t ...
協變和逆變
假設有這樣乙個類 class person icloneable 但是由於我們知道是返回乙個person類的例項,所以返回型別 object 寫在這裡總會覺得很彆扭,我們希望寫成 class person icloneable 顯然,這是錯的 雖然這是錯的,但這就是返回型別的協變性,只是非泛型介面和...