在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...