在C#中,存在兩個(gè)泛型修飾符:in和out,他們分別對(duì)應(yīng)逆變委托和協(xié)變委托。
我們知道,在C#中要想將一個(gè)泛型對(duì)象轉(zhuǎn)換為另一個(gè)泛型對(duì)象時(shí),必須要將一個(gè)泛型對(duì)象拆箱,對(duì)元素進(jìn)行顯式或隱式轉(zhuǎn)換后重新裝箱。
例如:
Listlobject=new List(){"0","1","2"};
List lint=new List();
foreach(Object obj in lobject)
{
lint.Add((int)obj);
}
在這個(gè)拆箱和裝箱的過(guò)程中,要消耗掉相當(dāng)于lobject對(duì)象兩倍的內(nèi)存和資源,如果lobject對(duì)象非常大,這將是非常巨大的資源消耗。泛型修飾符就是用來(lái)解決這個(gè)問(wèn)題的。
當(dāng)兩個(gè)泛型對(duì)象的元素存在繼承關(guān)系是,可以在實(shí)現(xiàn)泛型對(duì)象是為泛型元素增加in或者out聲明,以便逆變或協(xié)變。
逆變泛型:
ListIn:IList
ListInlobject = new ListIn(){"0","1","2"};
ListIn lint=new ListIn;
lint = lobject;
協(xié)變泛型:
ListOut:IList
ListOut lint=new ListOut(){0,1,2};
ListOutlobject=new ListOut();
lobject=lint;
原文鏈接:https://blog.csdn.net/mykge/article/details/42918841
編輯:何安
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141599 -
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36619
發(fā)布評(píng)論請(qǐng)先 登錄
C#中操作AP
Python與C#對(duì)比
“無(wú)注冊(cè)”修飾符如何防止變量被保存到CPU寄存器中?
請(qǐng)問(wèn)C++代碼的修飾符該怎么理解?
labview連接mongdb問(wèn)題,找到不.NET類中的泛型類
C語(yǔ)言類型修飾符Const的教程使用說(shuō)明
C語(yǔ)言類型修飾符Volatile的使用說(shuō)明
C51單片機(jī)中斷函數(shù)的修飾方法

Java四種訪問(wèn)修飾符及訪問(wèn)范圍
java內(nèi)部類可以用public修飾嗎
淺析C語(yǔ)言中的變量修飾符

評(píng)論