c 隱式轉換顯示轉換

2021-05-24 02:51:51 字數 3819 閱讀 3496

(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.隱式型別轉換 隱式轉換,就是系統預設的轉換,其本質是小儲存容量資料型別自動轉換為大儲存容量資料型別,該轉換是一種安全型別的轉換,不會導致資料丟失,因此不需要任何特殊的語法。下...