(1) 隱式轉換:一般是低型別向高型別轉化,能夠保證值不發生變化。
隱式數值轉換:
從 sbyte 到 short、int、long、float、double 或 decimal。
從 byte 到 short、ushort、int、uint、long、ulong、float double 或 decimal。
從 short 到 int、long、float、double 或 decimal。
從 ushort 到 int、uint、long、ulong、float、double 或 decimal。
從 int 到 long、float、double 或 decimal。
從 uint 到 long、ulong、float、double 或 decimal。
從 long 到 float、double 或 decimal。
從 ulong 到 float、double 或 decimal。
從 char 到 ushort、int、uint、long、ulong、float、double 或 decimal。
從 float 到 double。
不存在向 char 型別的隱式轉換,因此其它整型的值不會自動轉換為 char 型別。 浮點型不能隱式地轉化為decimal型
隱式列舉轉換
隱式列舉轉換允許將十進位制整數 0 轉換為任何列舉型別。
隱式引用轉換
派生類向基類轉換 隱式引用轉換是指一類引用型別之間的轉換,這種轉換總是可以成功,因此不需要在執行時進行任何檢查。
裝箱轉換
裝箱轉換允許將值型別隱式轉換為引用型別。
(2)顯示轉換:
也稱強制型別轉換。不能保證資料的正確性。 (type)(表示式)
(3)使用者自定義轉換
所有的使用者自定義轉換都是靜態的,要使用static關鍵字 使用者自定義轉換分顯示和隱示,它們用implicit(隱式轉換)或 explicit(顯示轉換)關鍵字宣告。 static 訪問修辭符 轉換修辭符 operator 轉換型別(引數)
示例:
using system;
struct number
private int value;
public number(int value)
this.value = value;
//使用者自定義整型到number型的隱式轉換
static public implicit operator number(int value)
return new number(value);
// 使用者自定義從number型到整型的顯示轉換
static public explicit operator int(number n)
return n.value;
//使用者自定義從number型別到string型別的隱式轉換
static public implicit operator string(number n)
return n.tostring();
class test
static public void main()
number n; n= 10;
console.writeline((int)n);
//隱式轉換到string console.writeline(n);
使用system.convert類
將乙個基本資料型別轉換為另乙個基本資料型別。
使用parse方法
大部份預定義值型別都有這個靜態方法,用來將相應的文字轉化為相應的值型別。
裝箱和取消裝箱
裝箱和取消裝箱使值型別能夠與 object 型別相互轉換。
裝箱轉換允許將「值型別」隱式轉換為「引用型別」。將「值型別」的值裝箱的操作包括:分配乙個物件例項並將「值型別」的值複製到該例項中。
示例:
此例將整數變數 i 通過裝箱轉換為物件 o。此例顯示物件保留了內容的原始副本,即 123。
using system;
class testboxing
public static void main()
int i = 123; object o = i; // 隱式的裝箱
i = 456; // 改變變數i的值
console.writeline("the value-type value = ", i); //456
console.writeline("the object-type value = ", o); //123 是i的複製值
取消裝箱轉換:
取消裝箱轉換允許將引用型別顯式轉換為值型別。
取消裝箱操作包括以下兩個步驟:首先檢查該物件例項是否是某個給定的值型別的裝了箱的值,然後將值從例項中複製出來。
示例:
下面的示例闡釋無效取消裝箱的情況,即錯誤的取消裝箱如何導致 invalidcastexception。通過使用 try 和 catch,發生錯誤時會顯示錯誤資訊。
using system;
public class unboxingtest
public static void main()
int inti = 123;
object o = inti; //裝箱
try
int intj = (short) o; //取消裝箱無效,short不是裝了箱的值型別. 檢查該物件例項是否是某個給定的值型別的裝了箱的值 console.writeline("unboxing ok.");
catch (invalidcastexception e)
console.writeline(" error: incorrect unboxing.",e);
其它轉換用運算子
as
as 運算子用於執行引用型別的顯式型別轉換。 如果要轉換的型別與指定型別相容,轉換就會成功;如果型別不相容,則返回null。 表示式as 型別 as 運算子類似於型別轉換,所不同的是,當轉換失敗時,as 運算子將返回null,而不是引發異常。
示例:
object o1=」somestring」;
object o2=5;
string s1=o1 as string; //型別相容 s1=」somestring」
string s2=o2 as string; //s2=null
is
is 運算子用於檢查物件的型別是否與給定型別相容(物件是該型別,或是派生於該型別)。 表示式 is 型別
示例:
int i=10;
if ( i is object) //true
sizeof
sizeof 運算子用於獲得值型別的大小(以位元組為單位)。
sizeof(type) sizeof 運算子僅適用於值型別,而不適用於引用型別。
sizeof 運算子僅可用於 unsafe 模式。
示例:
unsafe
console.writeline(「」,sizeof(int));
隱式轉換和顯示轉換
0前言1 c 的型別轉換分為兩種,一種為隱式轉換,另一種為顯式轉換。2 c 中應該盡量不要使用轉換,盡量使用顯式轉換來代替隱式轉換。1 隱式轉換 定義 隱式轉換是系統跟據程式的需要而自動轉換的。1 c 型別 char,int,float,long,double等 的隱式轉換 算術表示式隱式轉換順序為...
c 隱式轉換 顯示轉化
隱式轉換 class mm int m i 分別說說吧 1.a a 0 首先,compiler認為這樣寫是不符合規矩的,因為a a才是正常行為。但是她並不放棄,通過搜尋,發現a可以根據乙個int構造,同時這個a int i 沒有用explicit修飾過。那麼a a 0 這樣的一句話隨即轉變成 a t...
C 隱式和顯示型別轉換
c 是在編譯時靜態型別化的,因此變數在宣告後就無法再次宣告,或者無法用於儲存其他型別的值,除非該型別可以轉換為變數的型別。1.隱式型別轉換 隱式轉換,就是系統預設的轉換,其本質是小儲存容量資料型別自動轉換為大儲存容量資料型別,該轉換是一種安全型別的轉換,不會導致資料丟失,因此不需要任何特殊的語法。下...