C 委託中的協變與逆變 變我沒商量

2021-04-12 12:45:58 字數 961 閱讀 8341

簡單描述下協變:

例如 :主要是有個類box配生了bs,這樣一來,可以在以box類為返回值的max委託中,返回bx

當委託方法的返回型別具有的派生程度比委託簽名更大時,就稱為協變委託方法。--簡稱變我

class box{}

class bs: box {}

--------------在某個可執行的**中~~呵呵懶的寫了

public delegate box  max();

public static box firstmax()

public static bs secondmax()

max maxone = firstmax;

//---------------------主要是這裡變我咯

//-注意這個bs是繼承自box,隱式轉換

max maxtoo = secondmax;

當委託方法簽名具有乙個或多個引數,並且這些引數的型別派

生自方法引數的型別時,就稱為逆變委託方法更加簡單。

class box{}

class bs: box {}

//----------------------------------------還是在某個可執行的**中

public delegate void box(box s);

public static void boxhandler(box e)

public static void bshandler(bs s)

box box1 = boxhandler;

box box2 = bshandler;

C 委託中的協變與逆變

1 簽名 返回值型別和引數。2 委託呼叫要求委託的簽名必須與呼叫的方法的簽名匹配,如果簽名不匹配,將無法通過編譯器的型別檢查。3 協變 允許所呼叫方法的返回型別可以是委託的返回型別的派生型別,當委託方法的返回型別具有的派生程度比委託簽名更大時,就稱為協變委託方法。協變委託方法的優點是 使得建立可被類...

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

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

C 中協變與逆變的個人理解

讀了園子中一些前輩的關於c 中協變與逆變的文章,收穫很大,分享一下我的個人理解,希望用較淺顯的方式理解這個比較繞彎的概念。協變與逆變應該是clr的特性,我僅對我熟悉的c 舉例說明。說白了,它主要解決的是乙個型別轉換的問題,用乙個最簡單的泛型表示式就是 s s 當然這只是乙個抽象的表示式,而且只包含了...