C#學習基礎------類型轉換

類型轉換
c#語言中數據類型的轉換可以分為兩類:隱式轉換(implicit conversions)和顯式轉換

(explicit conversions)
1,隱式轉換就是系統默認的,不需要加以聲明就可以進行的轉換.編譯器無需對轉換進行詳

細檢查就能夠安全地執行轉換.
裝箱轉換實際上就是一种隱式類型轉換
隱式轉換有以下三种:
隱式數值轉換
隱式枚舉轉換
隱式引用轉換

1.1隱式數值轉換包括以下幾种:
從sbyte類型到short,int,long,float,double,decimal
從byte類型到short,ushot,int,uint,long,ulong,float,double,decimal
從short類型到int,long,float,double,decimal
從ushout類型到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
其中,從int,uint,long到float以及從long到double的轉換可能會精度下降,但決不會引起

數量上的丟失.其它的隱式數值轉換不會有任何信息丟失.
隱式數值轉換實際上就是從低精度的數值類型到高精度的數值類型的轉換.
1.2隱式枚舉轉換
隱式枚舉轉換允許把十進制整數轉0換成任何枚舉類型,對應其它的整數則不存在這种隱式

轉換,下面是一個列子:
using system;
emum Weekday {Sumday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
class test
{
  public static void Main()
  {
    Weekday day;
    day=0;
    Console.WriteLine(day);
  }
}
程序轉出的是0,如果把day=0改為day=1編譯器就會給出錯誤:
can not implictly convert type 'int' to type 'enum'
1.3隱式引用轉換
隱式引勝轉換包抱以下幾類:
從任何引用類型到對像類型的轉換.
從類類型s到類類型t的轉換,其中s是t的子類.
從類類型s到接口類型t的轉換,其中類s實現了接口.
從接口類型s到接口類型t的轉換,其中t是s的父接口.
從元素類型為Ts的數組類型S向元素類型為Tt的數組類型T轉換,這种轉換需要滿足下列條件

:S和T只有元素的數據類型不同,但它們的維數相同.Ts和Tt都是引用類型,存在從Ts到Tt的

隱式引用轉換.
從任何數組類型到System.Array的轉換.
從任何代表類型到System.Delegate的轉換.
從任何數組類型或代表類型到System.ICloneable的轉換.
從空類型(null)到任何引用類型的轉換.

2.顯式類型轉換
顯式類型轉換又叫強制類型轉換.與隱式轉換正好相反,顯式轉換需要用戶明確地指定轉換

的類型.
拆箱轉換是一种顯式轉換
顯式轉換分為以下三种:
顯式數值轉換
顯式枚舉轉換
顯式引用轉換

2.1顯式數值轉換是提當不存在相應的隱式轉換時,從一种數字類型到另一种數字類型的轉

換.包括:
從sbyte到byte,ushort,uint,ulong,char
從byte到sbyte,char
從short到sbyte,byte,ushort,uint,ulong,char
從ushort到sbyte,byte,short,char
從int到sbyte,byte,short,ushort,uint,ulong,char
從uint到sbyte,byte,short,ushort,int,uint,char
從long到sbyte,byte,short,ushort,int,uint,ulong,char
從ulong到sbyte,byte,short,ushort,int,uint,long,char
從char到sbyte,byte,short
從float到sbyte,byte,short,ushort,int,uint,long,ulong,char,decimal
從double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,decimal
從decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double
這种顯式轉換有可能丟失信息或是有異常拋出
2.2顯式枚舉轉換
從sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal到任何枚

舉類型.
從任何枚舉類型到

sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal
從任何枚舉類型到任何其它枚舉類型.
顯式枚舉轉換是這樣進行的:它實際上是枚舉類型的元素類型與相應類型之間的隱式或顯示

轉換,比如,有一個元素類型為int的枚舉類型E,則當執行從E到byte的顯式枚舉轉換時,實際

上作的是從int到byte的顯式數字轉換;當執行從byte到E的顯式枚舉轉換時,實際上是執行

byte到int的隱式數字轉換.
如下面的程序:
using system;
emum Weekday{Sumday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
class test
{
  public static void Main()
  {
    Weekday day;
    day=(Weekday)3;
    Console.WriteLine(day);
  }
}
程序輸出的是:3
2.3顯式引用轉換
顯式引用轉換包括:
從對像到任何引用類型
從類類型S到類類型T,其中S是T的基類.
從類類型S到接口類型T,其中S不是密封類,而且沒有實現T.
從接口類型S到類類型T,其中T不是密封類,而且沒有實現S.
從接口類型S到接口類型T,其中S不是T的子接口.
從元素類型為Ts的數組類型S到元素類型為Tt的數組類型T的轉換,這种轉換需要滿足下列條件:S和T只有元素的數據類型不同,而維數相同.Ts和Tt都是引用類型,存在從Ts到Tt的顯式引用轉換.
從System.Array到數組類型.
從System.Delegate到代表類型.
從System.ICloneable到數組類型或是代表類型.
不論是隱式還是顯式引用轉換,雖然可能會改變引用值的類型,卻不會改變值本身.

 

 

 


 

posted @ 2007-10-29 15:12  Athrun  阅读(800)  评论(0编辑  收藏  举报