新聞中心
C#語(yǔ)言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#基于Object解決方案,包括介紹編譯器允許在任何類(lèi)型和Object之間進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換等方面。

成都創(chuàng)新互聯(lián)公司IDC提供業(yè)務(wù):鄭州服務(wù)器托管,成都服務(wù)器租用,鄭州服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。
C#基于Object解決方案存在兩個(gè)問(wèn)題。第一個(gè)問(wèn)題是性能。在使用值類(lèi)型時(shí),必須將它們裝箱以便推送和存儲(chǔ)它們,并且在將值類(lèi)型彈出堆棧時(shí)將其取消裝箱。裝箱和取消裝箱都會(huì)根據(jù)它們自己的權(quán)限造成重大的性能損失,但是它還會(huì)增加托管堆上的壓力,導(dǎo)致更多的垃圾收集工作,而這對(duì)于性能而言也不太好。即使是在使用引用類(lèi)型而不是值類(lèi)型時(shí),仍然存在性能損失,這是因?yàn)楸仨殢?Object 向您要與之交互的實(shí)際類(lèi)型進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,從而造成強(qiáng)制類(lèi)型轉(zhuǎn)換開(kāi)銷(xiāo):
- Stack stack = new Stack();
- stack.Push("1");
- string number = (string)stack.Pop();
C#基于Object解決方案的第二個(gè)問(wèn)題(通常更為嚴(yán)重)是類(lèi)型安全。因?yàn)榫幾g器允許在任何類(lèi)型和Object之間進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,所以您將丟失編譯時(shí)類(lèi)型安全。例如,以下代碼可以正確編譯,但是在運(yùn)行時(shí)將引發(fā)無(wú)效強(qiáng)制類(lèi)型轉(zhuǎn)換異常:
- Stack stack = new Stack();
- stack.Push(1);
- //This compiles, but is not type safe, and will throw an exception:
- string number = (string)stack.Pop();
您可以通過(guò)提供類(lèi)型特定的(因而是類(lèi)型安全的)高性能堆棧來(lái)克服上述兩個(gè)問(wèn)題。對(duì)于整型,可以實(shí)現(xiàn)并使用 intstack:
- public class IntStack
- {
- int[] m_Items;
- public void Push(int item){...}
- public int Pop(){...}
- }
- IntStack stack = new IntStack();
- stack.Push(1);
- int number = stack.Pop();
- //對(duì)于字符串,可以實(shí)現(xiàn) stringstack:
- public class StringStack
- {
- string[] m_Items;
- public void Push(string item){...}
- public string Pop(){...}
- }
- StringStack stack = new StringStack();
- stack.Push("1");
- string number = stack.Pop();
網(wǎng)站欄目:C#基于Object解決方案
轉(zhuǎn)載源于:http://www.5511xx.com/article/cdigjcj.html


咨詢
建站咨詢
