<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 強制轉換和類型轉換(C# 編程指南) 由于 C# 是在編譯時靜態類型化的,因此變量在聲明后就無法再次聲明,或者無法用于存儲其他類型的值,除非該類型可以轉換為變量的類型。例如,不存在從整數到任意字符串的轉換。因此,將 i 聲明為整數后,就無法將字符串“Hello”賦予它,如下面的代碼中所示。 ``` int i; i = "Hello"; // Error: "Cannot implicitly convert type 'string' to 'int'" ``` 但有時可能需要將值復制到其他類型的變量或方法參數中。例如,您可能有一個整數變量,您需要將該變量傳遞給參數類型化為 **double** 的方法。或者可能需要將類變量賦給接口類型的變量。這些類型的操作稱為“類型轉換”。在 C# 中,可以執行以下幾種類型的轉換: * 隱式轉換:由于該轉換是一種安全類型的轉換,不會導致數據丟失,因此不需要任何特殊的語法。例如,從較小整數類型到較大整數類型的轉換以及從派生類到基類的轉換都是這樣的轉換。 * 顯式轉換(強制轉換):顯式轉換需要強制轉換運算符。在轉換中可能丟失信息時或在出于其他原因轉換可能不成功時,必須進行強制轉換。典型的例子包括從數值到精度較低或范圍較小的類型的轉換和從基類實例到派生類的轉換。 * 用戶定義的轉換:可以定義一些特殊的方法來執行用戶定義的轉換,從而使不具有基類–派生類關系的自定義類型之間可以顯式和隱式轉換。有關更多信息,請參見 [轉換運算符(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/09479473.aspx)。 * 使用幫助程序類的轉換:若要在不兼容的類型之間進行轉換,例如在整數與 [System.DateTime](https://msdn.microsoft.com/zh-cn/library/system.datetime.aspx) 對象之間轉換,或者在十六進制字符串與字節數組之間轉換,則可以使用 [System.BitConverter](https://msdn.microsoft.com/zh-cn/library/system.bitconverter.aspx) 類、[System.Convert](https://msdn.microsoft.com/zh-cn/library/system.convert.aspx) 類和內置數值類型的 **Parse** 方法,例如 [Int32.Parse](https://msdn.microsoft.com/zh-cn/library/system.int32.parse.aspx)。有關更多信息,請參見[如何:將字節數組轉換為 int(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb384066.aspx)、[如何:將字符串轉換為數字(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb397679.aspx)和[如何:在十六進制字符串與數值類型之間轉換(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb311038.aspx)。 ## 隱式轉換 對于內置數值類型,如果要存儲的值無需截斷或四舍五入即可適應變量,則可以進行隱式轉換。例如,[long](https://msdn.microsoft.com/zh-cn/library/ctetwysk.aspx) 類型的變量(8 字節整數)能夠存儲 [int](https://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx)(在 32 位計算機上為 4 字節)可存儲的任何值。在下面的示例中,編譯器先將右側的值隱式轉換為 **long** 類型,再將它賦給 bigNum。 ``` // Implicit conversion. num long can // hold any value an int can hold, and more! int num = 2147483647; long bigNum = num; ``` 有關所有隱式數值轉換的完整列表,請參見[隱式數值轉換表(C# 參考)](https://msdn.microsoft.com/zh-cn/library/y5b434w4.aspx)。 對于引用類型,隱式轉換始終存在于從一個類轉換為該類的任何一個直接或間接的基類或接口的情況。由于派生類始終包含基類的所有成員,因此不必使用任何特殊語法。 ``` Derived d = new Derived(); Base b = d; // Always OK. ``` ## 顯式轉換 但是,如果進行轉換可能會導致信息丟失,則編譯器會要求執行顯式轉換,顯式轉換也稱為“強制轉換”。強制轉換是顯式通知編譯器您打算進行轉換且您知道可能會發生數據丟失的一種方式。若要執行強制轉換,請在要轉換的值或變量前面的圓括號中指定要強制轉換到的類型。下面的程序將 [double](https://msdn.microsoft.com/zh-cn/library/678hzkk9.aspx) 強制轉換為 [int](https://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx)。如不強制轉換則該程序不會進行編譯。 ``` class Test { static void Main() { double x = 1234.7; int a; // Cast double to int. a = (int)x; System.Console.WriteLine(a); } } // Output: 1234 ``` 有關支持的顯式數值轉換的列表,請參見[顯式數值轉換表(C# 參考)](https://msdn.microsoft.com/zh-cn/library/yht2cx7b.aspx)。 對于引用類型,如果需要從基類型轉換為派生類型,則必須進行顯式強制轉換: ``` // Create a new derived type. Giraffe g = new Giraffe(); // Implicit conversion to base type is safe. Animal a = g; // Explicit conversion is required to cast back // to derived type. Note: This will compile but will // throw an exception at run time if the right-side // object is not in fact a Giraffe. Giraffe g2 = (Giraffe) a; ``` 引用類型之間的強制轉換操作不會更改基礎對象的運行時類型;它只更改用作對該對象的引用的值的類型。有關更多信息,請參見 [多態性(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173152.aspx)。 ## 運行時的類型轉換異常 在某些引用類型轉換中,編譯器無法確定強制轉換是否會有效。正確進行編譯的強制轉換操作有可能在運行時失敗。如下面的示例所示,類型強制轉換在運行時失敗將導致引發 [InvalidCastException](https://msdn.microsoft.com/zh-cn/library/system.invalidcastexception.aspx)。 ``` using System; class Animal { public void Eat() { Console.WriteLine("Eating."); } public override string ToString() { return "I am an animal."; } } class Reptile : Animal { } class Mammal : Animal { } class UnSafeCast { static void Main() { Test(new Mammal()); // Keep the console window open in debug mode. System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } static void Test(Animal a) { // Cause InvalidCastException at run time // because Mammal is not convertible to Reptile. Reptile r = (Reptile)a; } } ``` C# 提供 [is](https://msdn.microsoft.com/zh-cn/library/scekt9xw.aspx) 和 [as](https://msdn.microsoft.com/zh-cn/library/cscsdfbt.aspx) 運算符,使您可以在實際執行強制轉換之前測試兼容性。有關更多信息,請參見 [如何:使用 as 和 is 運算符安全地進行強制轉換(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/cc488006.aspx)。 ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-cn/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 重要章節 [More About Variables](http://go.microsoft.com/fwlink/?LinkId=221230) 在 [Beginning Visual C# 2010](http://go.microsoft.com/fwlink/?LinkId=221214) ## 請參閱 [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [類型(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173104.aspx) [() 運算符(C# 參考)](https://msdn.microsoft.com/zh-cn/library/0z4503sa.aspx) [explicit(C# 參考)](https://msdn.microsoft.com/zh-cn/library/xhbhezf4.aspx) [implicit(C# 參考)](https://msdn.microsoft.com/zh-cn/library/z5z9kes2.aspx) [轉換運算符(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/09479473.aspx) [Generalized Type Conversion](https://msdn.microsoft.com/zh-cn/library/yy580hbd.aspx) [Exported Type Conversion](https://msdn.microsoft.com/zh-cn/library/46f8ac6z.aspx) [如何:將字符串轉換為數字(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/bb397679.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看