我們可以使用指針作為一個例子。在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ù)運(yùn)算有可能溢出結(jié)果數(shù)據(jù)類型的范圍。C#允許在語句級或應(yīng)用程序級檢測這些運(yùn)算。在允許檢查溢出的情況下,當(dāng)溢出發(fā)生時將會引發(fā)一個異常。
在C#中,被傳遞的引用參數(shù)是類型安全的。
新聞熱點
疑難解答
圖片精選