艰难的道路
不為自己被淘汰找借口,因?yàn)樽约哼€不夠努力,因?yàn)樽约汉茏源?,因?yàn)樽约旱男母庠?,因?yàn)樽约旱臒o知天真,職場不同于大學(xué),這是一個(gè)真正的戰(zhàn)場,你不去奮斗,到頭來苦的還是自己,就拿C#中的很多語法糖而言,自己能夠不看代碼,不看書本,不看筆記,憑借自己的印象說出來的也就那么幾個(gè),今天早上起床后吃了早飯,就開始學(xué)習(xí)anytao的<<你必須知道的.NET第二版>>,中間也遇到了不少的問題,苦于自己不會(huì)使用搜索引擎,很多東西都不知道怎么去查詢關(guān)鍵字,只好在作者的博客發(fā)問了。
這個(gè)點(diǎn)正在回顧裝箱和拆箱的知識,在學(xué)校的時(shí)候這個(gè)知識點(diǎn)幾乎沒有理解,只知道在Console中寫一個(gè)小Demo,然后也就驕傲的說我明白裝箱和拆箱了,但是直到今天,我也只曉得一些最基礎(chǔ)的概念,裝箱是值類型轉(zhuǎn)換為引用類型,拆箱是引用類型轉(zhuǎn)換為值類型,伴隨著裝箱和拆箱付出的是性能的代價(jià)。
就拿anytao引言中的小例子來說下自己對這塊的理解,如果說的不正確的麻煩各位使勁的拍磚。
public static void Main()
{
int i=100;
object o=i;
o=200;
Hashtable ht=new Hashtable();
ht.Add("I",i);
ht["I"]=o;
Console.WriteLine(i + " is original, " + (int)ht["I"] + " is changing. ");
}
發(fā)生了幾次裝箱,幾次拆箱?
首先object o = i;這個(gè)是值類型轉(zhuǎn)換成引用類型,屬于裝箱操作。 o = 200,同樣的也是值類型轉(zhuǎn)換成引用類型,屬于裝箱操作。 ht.Add("I",i);這個(gè)應(yīng)該也是裝箱操作。
(int)ht["I"],這個(gè)是引用類型轉(zhuǎn)換成值類型的,屬于拆箱操作的。
第二個(gè)小例子是
public static void Main()
{
float = 1.01F;
object o = f;
double d=(double)o; //Convert.ToDouble(o)可是實(shí)現(xiàn)將object類型轉(zhuǎn)換成值類型的
}
這段代碼編譯的時(shí)候沒有任何問題,運(yùn)行時(shí)會(huì)報(bào)未處理的InvalidCastException 指定的轉(zhuǎn)換無效。
因?yàn)橹挥斜谎b過箱的對象才能被拆箱,而并非所有的引用類型。將并非裝箱而來的引用類型強(qiáng)制轉(zhuǎn)換成值類型,將會(huì)拋出InvalidCastException異常。
說到著,才發(fā)現(xiàn)自己之前理解的裝箱和拆箱概念上還是有很大的出入的,anytao講解的很形象,很有價(jià)值,可能平時(shí)工作的時(shí)候很少關(guān)注這些,感覺自己把功能實(shí)現(xiàn)了就OK了,但是本質(zhì)上還有很多很多的東西值得你去關(guān)注,今天天氣很好,寫一份看書筆記,希望這是一個(gè)好的開始。
最后摘抄一下anytao書中的一段裝箱就是值類型數(shù)據(jù)轉(zhuǎn)換成無類型的引用對象,使得我們可以將值類型視為對象來處理,通常這種轉(zhuǎn)換主要是指轉(zhuǎn)換為System.Object類型或者該值類型實(shí)現(xiàn)的任何接口引用類型;而拆箱就是引用類型轉(zhuǎn)換成值類型,通常伴隨著從堆中復(fù)制對象實(shí)例的操作。
總結(jié)
- 上一篇: Angular ActivatedRou
- 下一篇: flash程序如何制作一个精美的图案