淺談C#中資料類型轉換

來源:互聯網
上載者:User
  類型轉換 
    顯示轉換
    隱式轉換
    使用者自訂轉換

(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類

       將一個基礎資料型別 (Elementary Data Type)轉換為另一個基礎資料型別 (Elementary Data Type)。

使用Parse方法

大部份預定義實值型別都有這個靜態方法,用來將相應的文本轉化為相應的實值型別。

裝箱和unboxing

       裝箱和unboxing使實值型別能夠與 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 = {0}", i);       //456
      Console.WriteLine("The object-type value = {0}", o);     //123 是i的複製值
   }
}
       unboxing轉換:unboxing轉換允許將參考型別顯式轉換為實值型別。

       unboxing操作包括以下兩個步驟:首先檢查該對象執行個體是否是某個給定的實值型別的裝了箱的值,然後將值從執行個體中複製出來。
樣本:

       下面的樣本闡釋無效unboxing的情況,即錯誤的unboxing如何導致 InvalidCastException。通過使用 try 和 catch,發生錯誤時會顯示錯誤資訊。
using System;
public class UnboxingTest
{
   public static void Main() 
   {
      int intI = 123;
      object o = intI; //裝箱
      try 
      {
         int intJ = (short) o; //unboxing無效,short不是裝了箱的實值型別. 檢查該對象執行個體是否是某個給定的實值型別的裝了箱的值
         Console.WriteLine("Unboxing OK.");
      }
      catch (InvalidCastException e) 
      {
         Console.WriteLine("{0} 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(“{0}”,sizeof(int));
       } 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.