資料型別轉換
隱式轉換
int age = 10;
double sum = age;
int salary = 150000;
decimal money = salary;
double speed = 10.4f;
float minspeed = (float)speed;
string num = "123";
int n = int.parse (num);
int m = convert.toint16 (num);
物件型別轉換
在c#語言中進行型別轉換的操作符is和as。is和as都是強制型別轉換,但這兩者有什麼相同之處和不同之處呢?在使用is和as需要注意哪些事項?下面我們從簡單的**示例去**這個簡單的問題。注:此博文只是本人學習過程中一些簡要記錄,新手可以看一下,高手略過。
is檢查乙個物件是否相容於指定的型別,並返回乙個boolean值:true或者fasle。注意,is操作符永遠不會丟擲異常,請看以下示例:
classa
object o=new object();
boolean b1=(o is object); //b1為true.
boolean b2=(o is classa) ; b2為false.
如果物件引用是null,is操作符總是返回false,因為沒有可檢查的其型別的物件。
is 操作符通常像下面這樣使用:
if(obj is classa)
在這一段**中,clr實際會檢查兩次物件型別。is操作符首先核實obj是否相容於classa 型別。如果是,那麼在if語句內部執行型別轉換時,clr再次核實obj是否引用乙個classa。clr的型別檢查增強了安全性,但也會對效能造成一定的影響。這是因為clr首先必須判斷(obj)引用的物件的實際型別。然後clr必須遍歷繼承層次結構,用每個基型別去核對指定的型別(classa)。
實際系統開發中,這是乙個相當常用的程式設計模式,於是c#有了操作符as。
as與is做差不多的事情,型別顯式強制轉換。
as操作符的工作方式與強制型別轉換一樣,只是它永遠不會丟擲乙個異常——相反,如果物件不能轉換,結果就是null。
但as有其不同的地方,簡化**,同時提公升效能。
請看示例**:
object obj=new object();
classa a= obj as classa;
if(a!=null) //在if判斷a是否為null
在這一段**中,clr核實obj是否相容於classa型別,如果是,as會返回對同乙個物件的乙個非null引用;
如果obj不相容classa型別,as操作符會返回null。
因此,as操作符使clr只檢驗一次物件的型別。
if語句只是檢查a是否為null。這個檢查的速度比檢驗物件的型別快得多。
所以正確做法是檢查最終生成的引用是否為null。如果企圖直接使用最終生成null的引用,會丟擲乙個 nullreferenceexception異常。
示例**:
object obj=new object(); //建立乙個object物件.
classa a =obj as classa;//將obj轉型為classa,此時轉型操作會失敗,不會丟擲異常,但a會被設為null.
a.tostring();//訪問a會丟擲乙個nullreferenceexception異常。
C 型別轉化
c 型別轉化 在理解c 型別轉換前,我們先回顧c語言中型別轉換。c風格的強制型別轉化很簡單,不管什麼型別轉換統統是 type b type a。但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非con...
C 型別轉化
const char a 必須const 因為 hello 存在常量區,為唯讀 string str hello str 1 s pass a str.c str a 1 s fail 報錯 唯讀,指標指向常量區char a a 11 int b atoi a cout string str to ...
C 型別轉化
在 c 中,int int32.parse 和 convert.toint32 三種方法有何區別?int 關鍵字表示一種整型,是32位的,它的 net framework 型別為 system.int32。int 表示使用顯式強制轉換,是一種型別轉換。當我們從 int 型別到 long float ...