C 筆記 協變 逆變

2021-07-28 06:38:31 字數 712 閱讀 6421

理解:在泛型和委託中, 讓使用某個泛型引數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...