協變就是和諧的變化,逆變是不正常的變化
//協變和逆變都是用來修飾泛型的
協變:out
逆變:in
//只有泛型介面和泛型委託能使用
//用out修飾的泛型只能作為返回值
delegate t testout
<
outt
>()
;//用in修飾的泛型只能作為引數
delegate
void
testin
>
(t t)
;class
father
class
son:
father
class
program
; testout of = os;
father f =of(
);//逆變 子類裝父類
testin if =
(value)=
>
; testin is = if ;is(
newson()
);//實際上呼叫的是if
}}
泛型委託的父類和子類相互裝載時,會用到out協變和in逆變,所以平時也用不到,面試中會問out和in是什麼即可 C 協變逆變
1.泛型的協變逆變 注意 只能放在介面或者委託的泛型引數前面 1 委託泛型引數 static class testconsole private static argumentexception test1 object obj private static exception test2 stri...
協變和逆變
協變和逆變都是術語,前者指能夠使用比原始指定的派生型別的派生程度更大的型別,後者指能夠使用比原始指定的派生型別的派生程度更小的型別。using system using system.collections.generic using system.text class derived base s...
協變和逆變
二 真正的協變和逆變 概念 1 以前的泛型系統 或者說沒有in out關鍵字時 是不能 變 的,無論是 逆 還是 順 協 2 當前僅支援介面和委託的逆變與協變 不支援類和方法。但陣列也有協變性。3 值型別不參與逆變與協變。協變 foo foo public class testoutwhere t ...