C#深入學習:泛型修飾符in,out、逆變委託型別和協變委託型別
在C#中,存在兩個泛型修飾符:in和out,他們分別對應逆變委託和協變委託。
我們知道,在C#中要想將一個泛型物件轉換為另一個泛型物件時,必須要將一個泛型物件拆箱,對元素進行顯式或隱式轉換後重新裝箱。
例如:
List<Object> lobject=new List<Object>(){"0","1","2"};List<int> lint=new List<int>();foreach(Object obj in lobject){ lint.Add((int)obj);}
在這個拆箱和裝箱的過程中,要消耗掉相當於lobject物件兩倍的記憶體和資源,如果lobject物件非常大,這將是非常巨大的資源消耗。泛型修飾符就是用來解決這個問題的。
當兩個泛型物件的元素存在繼承關係是,可以在實現泛型物件是為泛型元素增加in或者out宣告,以便逆變或協變。
逆變泛型:
ListIn:IList<in T>
ListIn<Object> lobject = new ListIn<Object>(){"0","1","2"};
ListIn<int> lint=new ListIn<int>;
lint = lobject;
協變泛型:
ListOut:IList<out T>
ListOut<int> lint=new ListOut<int>(){0,1,2};
ListOut<Object> lobject=new ListOut<Object>();
lobject=lint;
相關文章
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- C#自學(一)委託(delegate)、委託泛型、多播委託C#泛型
- C#基礎:泛型委託C#泛型
- .Net委託型別解析型別
- C#規範整理·泛型委託事件C#泛型事件
- C# 泛型的協變和逆變C#泛型
- 五分鐘重溫C#委託,匿名方法,Lambda,泛型委託,表示式樹C#泛型
- 五分鐘重溫委託,匿名方法,Lambda,泛型委託,表示式樹泛型
- C#泛型的逆變協變(個人理解)C#泛型
- 用委託者模式實現的多型別Adapter模式多型型別APT
- C#學習筆記--資料結構、泛型、委託事件等進階知識點C#筆記資料結構泛型事件
- .NET泛型中的協變與逆變泛型
- c#委託C#
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- C# 事件委託C#事件
- C#委託(delegate)C#
- C# 委託事件C#事件
- 委託、事件--委託例項篇事件
- 委託、Lambda表示式、事件系列01,委託是什麼,委託的基本用法,委託的Method和Target屬性事件
- C#:委託和自定義事件C#事件
- C# 中的委託和事件C#事件
- C#的委託案例C#
- C#委託與事件C#事件
- C#委託理解(1)C#
- c# 委託測試C#
- C#再識委託C#
- C# 事件 vs 委託C#事件
- C#中的委託C#
- object-c 協議和委託Object協議
- 委託與事件-委託詳解(一)事件
- Python語法--可變型別和不可變型別Python型別
- 泛型協變與抗變(二)泛型
- 委託、Lambda表示式、事件系列04,委託鏈是怎樣形成的, 多播委託, 呼叫委託鏈方法,委託鏈異常處理事件
- 詳解C#委託和事件(一)C#事件
- 詳解C#委託和事件(二)C#事件
- C#中的委託和事件(續)C#事件
- Kotlin實戰 | 2 = 12 ?泛型、類委託、過載運算子綜合應用Kotlin泛型
- 事件委託事件