現(xiàn)代程序員寫代碼沒有人敢說自己沒用過泛型,這個(gè)泛型模板T可以被任何你想要的類型替代,確實(shí)很魔法很神奇,很多人也習(xí)以為常了,但就是這么有趣的泛型T底層到底是怎么幫你實(shí)現(xiàn)的,不知道有多少人清楚底層玩法,這篇我就試著來分享一下,不一定全對(duì)哈。。。
一:沒有泛型前
現(xiàn)在?.NETcore 3.1和最新的.netframework8早已經(jīng)沒有當(dāng)初那個(gè)被人詬病的ArrayList了,但很巧這玩意不得不說,因?yàn)樗鼪Q定了C#團(tuán)隊(duì)痛改前非,拋棄過往重新上路,上一段ArrayList案例代碼。
public class ArrayList
{
private object[] items;
private int index = 0;
public ArrayList()
{
items = new object[10];
}
public void Add(object item)
{
items[index++] = item;
}
}
上面這段代碼,為了保證在Add中可以塞入各種類型 eg: int,double,class, 就想到了一個(gè)絕招用祖宗類object接收,這就引入了兩大問題,裝箱拆箱和類型安全。
1. 裝箱拆箱
這個(gè)很好理解,因?yàn)槟闶褂昧俗孀陬悾援?dāng)你 Add 的時(shí)候塞入的是值類型的話,自然就有裝箱操作,比如下面代碼:
ArrayList arrayList = new ArrayList();
arrayList.Add(3);
<1> 占用更大的空間
這個(gè)問題我準(zhǔn)備用windbg看一下,相信大家知道一個(gè)int類型占用4個(gè)字節(jié),那裝箱到堆上是幾個(gè)字節(jié)呢,好奇吧






