理解:在泛型和委託中, 讓使用某個泛型引數a的型別可以用乙個使用由a派生的泛型引數b的型別例項化,(小=> 大)如
// ienumerable與 list之間無繼承關係,但是不會報錯,協變
// ienumerableienumerableanimals = new list();
// 下行會報錯 => list不繼承 list型別, 無法型別轉化
// listlistanimals = new list();
條件: 使用 泛型修飾符out
, 並且只能用作返回型別,該泛型引數不能用作方法引數使用
理解: 在泛型和委託中, 讓使用某個泛型引數a的型別可以用乙個使用a父類級別的泛型引數b的型別例項化,(大=>小)如
// action與 action無繼承關係,不報錯無,逆變
// actionactionactiondog = new action(a => );
// 下行報錯 => func與 func無繼承關係,報錯
// funcfuncactiondog1 = new func(() => new dog());
條件:使用 泛型修飾符in
, 並且只能被使用,或者作為方法引數,不能用作返回型別
返回結果的協變性
使用型別的逆變性
那些年搞不懂的"協變"和"逆變"
C 筆記 協變 逆變
理解 在泛型和委託中,讓使用某個泛型引數a的型別可以用乙個使用由a派生的泛型引數b的型別例項化,小 大 如 ienumerable與 list之間無繼承關係,但是不會報錯,協變 ienumerableienumerableanimals new list 下行會報錯 list不繼承 list型別,無...
C 協變逆變
1.泛型的協變逆變 注意 只能放在介面或者委託的泛型引數前面 1 委託泛型引數 static class testconsole private static argumentexception test1 object obj private static exception test2 stri...
c 協變 逆變複習
c 中泛型同c 中的stl基本類似。例子如下 using system class test public static void swap ref t a,ref t b 定義乙個泛型的方法 為了能使泛型介面引用子類物件時使用object型別來接受其它型別的物件,引入協變,例子如下 using s...