c#是一門強型別語言,即在編譯時靜態型別化的,因此變數在宣告後就無法再次宣告,或者無法儲存其它型別的值,除非把該值轉化成宣告的型別。當需要將一種型別變數的值複製到另一種型別的變數或引數中是,就需要型別轉換。
int num = 2147483647;
long bignum = num;//隱式轉換
class
programe
}class
classchild:classbase
class
classbase
class
programe
}class
classchild:idosometing
inte***ce
idosometing
class
test
}// output: 1234
在某些引用型別轉換中,編譯器無法確定強制轉換是否會有效。 正確進行編譯的強制轉換操作有可能在執行時失敗。 如下面的示例所示,型別強制轉換在執行時失敗將導致引發 invalidcastexception。
using system;
class
animal
public
override
string tostring()
}class
reptile : animal
class
mammal : animal
class
unsafecast
static
void test(animal a)
}
由於物件是多型的,因此基類型別的變數可以儲存派生型別。 若要訪問派生型別的方法,需要將值強制轉換回該派生型別。 不過,在這些情況下,如果只嘗試進行簡單的強制轉換,會導致引發 invalidcastexception 的風險。 這就是 c# 提供 is 和 as 運算子的原因。 您可以使用這兩個運算子來測試強制轉換是否會成功,而沒有引發異常的風險。 通常,as 運算子更高效一些,因為如果可以成功進行強制轉換,它會實際返回強制轉換值。 而 is 運算子只返回乙個布林值。 因此,如果只想確定物件的型別,而無需對它進行實際強制轉換,則可以使用 is 運算子。
class safecasting
public
override
string
tostring()
}class mammal : animal
class giraffe : mammal
class supernova
static
void main()
void useisoperator(animal a)
}void useasoperator(object o)
else
is not a mammal", o.gettype().name);}}
void useaswithnullable(system.valuetype val)
else
}}
C 抽象類(知識要點歸納總結)
抽象類就像是具體類和介面之間的乙個過渡。抽象類具有一介面的含有抽象方法 本質上介面中的方法就是抽象方法 的特性,也具有具體類的具體方法和屬性的特性。抽象類就像乙個具體類 抽象類類的定義類似於具體類。抽象類可以有字段和方法也可以繼承其他類。抽象類就像乙個介面 繼承抽象類的子類必須要實現該抽象類的所有抽...
C 型別轉換歸納
本篇根據程式設計遇到的型別轉換慢慢往上加東西。cstring 轉 int cstring str 123 如果其中填的不全是數字,則返回從左到右碰到第乙個非數字字元前的數字字元數值,如果最左邊不是數字字元,返回0 int i ttoi str cstring 轉 char unicode字符集環境 ...
C 型別轉換總結
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a。c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...