c 高階 7 協變和逆變

2021-10-20 21:39:12 字數 657 閱讀 5711

協變就是和諧的變化,逆變是不正常的變化

//協變和逆變都是用來修飾泛型的

協變: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 ...