在C++中擁有一個(gè)指針,您能zi you地把它強(qiáng)制轉(zhuǎn)換成為任何類型,包括干出諸如把一個(gè)int*(整型指針)強(qiáng)制轉(zhuǎn)換成一個(gè)double *(雙精度指針)這樣的傻事。只要內(nèi)存支持這種操作,它就"干過"。這并不是您所想象的企業(yè)級(jí)編程語言的類型安全。
綱要性的問題,C#實(shí)施最嚴(yán)ge的類型安全,以保護(hù)自己及垃圾收集器(garbage collector)。所以必須遵守C#中一些相關(guān)變量的規(guī)則:
您不能使用沒有初始化的變量。對(duì)于對(duì)象的成員變量,編譯器負(fù)責(zé)清零。而局部變量,則由您負(fù)責(zé)清零。當(dāng)您使用一個(gè)沒有初始化的變量時(shí),編譯器會(huì)教您怎么做。優(yōu)點(diǎn)是能夠避免由于使用不經(jīng)初始化的變量計(jì)算結(jié)果而導(dǎo)致的錯(cuò)誤,而您還不知道這些奇怪的結(jié)果是如何產(chǎn)生的。
C#取消了不安全的類型轉(zhuǎn)換。不能把一個(gè)整型強(qiáng)制轉(zhuǎn)換成一個(gè)引用類型(如對(duì)象),而當(dāng)向下轉(zhuǎn)換時(shí),C#驗(yàn)證這種轉(zhuǎn)換是正確的。(也就是說,派生類真的是從向下轉(zhuǎn)換的那個(gè)類派生出來的。)
邊界檢查是C#的一部分。再也不會(huì)出現(xiàn)這種情況:當(dāng)數(shù)組實(shí)際只定義了n-1個(gè)元素,卻超額地使用了n個(gè)元素。
算術(shù)運(yùn)算有可能溢出終值數(shù)據(jù)類型的范圍。C#允許在語句級(jí)或應(yīng)用程序級(jí)檢測(cè)這些運(yùn)算。在允許檢測(cè)溢出的情況下,當(dāng)溢出發(fā)生時(shí)將會(huì)拋出一個(gè)異常。
在C#中,被傳遞的引用參數(shù)是類型安全的。
新聞熱點(diǎn)
疑難解答
圖片精選