在C#中,存在兩個泛型修飾符:in和out,他們分別對應逆變委托和協變委托。
我們知道,在C#中要想將一個泛型對象轉換為另一個泛型對象時,必須要將一個泛型對象拆箱,對元素進行顯式或隱式轉換后重新裝箱。
例如:
Listlobject=new List(){"0","1","2"};
List lint=new List();
foreach(Object obj in lobject)
{
lint.Add((int)obj);
}
在這個拆箱和裝箱的過程中,要消耗掉相當于lobject對象兩倍的內存和資源,如果lobject對象非常大,這將是非常巨大的資源消耗。泛型修飾符就是用來解決這個問題的。
當兩個泛型對象的元素存在繼承關系是,可以在實現泛型對象是為泛型元素增加in或者out聲明,以便逆變或協變。
逆變泛型:
ListIn:IList
ListInlobject = new ListIn(){"0","1","2"};
ListIn lint=new ListIn;
lint = lobject;
協變泛型:
ListOut:IList
ListOut lint=new ListOut(){0,1,2};
ListOutlobject=new ListOut();
lobject=lint;
原文鏈接:https://blog.csdn.net/mykge/article/details/42918841
編輯:何安
-
C語言
+關注
關注
180文章
7630瀏覽量
140220 -
編程語言
+關注
關注
10文章
1955瀏覽量
36061
發布評論請先 登錄
C#中操作AP
“無注冊”修飾符如何防止變量被保存到CPU寄存器中?
請問C++代碼的修飾符該怎么理解?
labview連接mongdb問題,找到不.NET類中的泛型類
C語言類型修飾符Const的教程使用說明
C語言類型修飾符Volatile的使用說明
Java四種訪問修飾符及訪問范圍
java內部類可以用public修飾嗎
淺析C語言中的變量修飾符

評論