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