C 的as和is區別

2021-10-07 21:51:14 字數 1922 閱讀 3094

在c#中,所有的東西都是物件。因此任何常數也是乙個整型物件。這裡用到了as,as是c#語言裡面的乙個關鍵字。as運算子類似於型別轉換,所不同的是,當轉換失敗時,as運算子將產生空,而不是引發異常。在形式上,這種形式的表示式:

expression as type

as 運算子只執行引用轉換和裝箱轉換。

as 運算子無法執行其他轉換,如使用者定義的轉換,這類轉換應使用case表示式來代替其執行

關於is的其實也差不多,只是is不會幫你進行任何的轉換。所以需要自已進行顯示轉換

is操作符進行轉換,它自動檢查時局是否和型別相容,並返回結果。而且它不會丟擲異常。如果物件引用為null,則is總返回false。

if

(cls1 is class2)

else

system.console.

writeline

("error 2!"

);

as操作符進行轉換:

class2 cls2 = cls1 as class2;

if(cls2!=null)

system.console.

writeline

("ok");

else

system.console.

writeline

("error!"

);

對比兩種方式,is需要做兩次物件的型別檢查,而as需要做一次物件型別檢查,再加一次null的檢查,而null檢查開銷比物件型別檢查少。

相對as的方法效率高些,現在明白了is與as的用處了,主要是型別的轉換和判斷,如果只是檢測型別是否相符那麼只用is就可以了,如果要進行型別轉化可以直接用as。其實可以直接進行強制轉換,只是當型別不符合時會出錯,這是可以利用try{} catch(){} 來進行,但丟擲的異常時什麼呢?

型別轉換

1.任何型別都可以轉換為其基類型別,用隱式轉換完成;

2.任何型別轉換為其派生型別時,必須進行顯示轉換。如:(型別名)物件名;

3.使用gettype可以取得任何物件的精確型別;

4.基本型別可以使用convert類實現型別轉換;

5.除了string以外的其他型別都有parse方法,用於將字串型別轉換成對應的基本型別;

6.值型別和引用型別的轉換稱為裝箱(boxing)或拆箱(unboxing);

is轉換規則:

檢查物件型別的相容性,並返回結果true(false);

2.不會丟擲異常;

3.如果物件為null,剛返回false;

示例:

object o =

"abc";if

(oisstring)

//執行第一次型別相容性檢查

else

as轉換規則:

1.檢查物件型別的相容性,並返回轉換結果,如果不相容則返回null;

2.不會丟擲異常;

3.如果結果判斷為空,則強制執行型別轉換將丟擲nullreferenceexception異常;

object o =

"abc"

; string s = oasstring;

//執行第一次型別相容性檢查,並返回結果

if(s !=null)

messagebox.

show

("轉換成功!");

else

messagebox.

show

("轉換失敗!"

);

簡記:

is是先進行相容性檢查再進行顯式轉換,as是執行一次型別相容性檢查,並返回結果

c和c 的區別 gcc和g 的區別

c89沒有帶有預設值的函式 c99有 c 99有帶有預設值的函式 從右向左給預設值 函式宣告處也可以 給預設值。c語言沒有內聯函式。內聯函式 在函式的呼叫點,把函式的 全部展開,編譯過程所做的工作。而巨集是在預編譯展開的 預編譯階段不進行檢查,純粹的字串替換 所以可以把內聯函式稱作更安全的巨集 編譯...

gcc和g 的區別?c和c 的區別?

很明顯,gcc是用來編譯c程式的,而g 是用來編譯c 程式的。但是g 可以同時編譯c c 程式,這是因為g 在編譯c程式的時候會呼叫gcc。而gcc不可以編譯c 程式,分步測試,發現gcc在編譯c 程式的時候在編譯和鏈結這兩步報錯,而前面預編譯 彙編都可以順利通過。這是因為c和c 程式在預編譯和彙編...

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...