C++編程人員容易犯的10個C#錯誤4

字號:

錯誤4:注意隱性的數據類型轉換
    Boxing和unboxing是使值型數據類型被當作索引型數據類型使用的二個過程。值型變量可以被包裝進一個對象中,然后再被解包回值型變量。包括內置數據類型在內的所有C#中的數據類型都可以被隱性地轉化為一個對象。包裝一個值型變量就會生成一個對象的實例,然后將變量拷貝到實例中。
    Boxing是隱性的,如果在需要索引型數據類型的地方使用了值型數據類型的變量,值型變量就會隱性地轉化為索引型數據類型的變量。Boxing會影響代碼執(zhí)行的性能,因此應當盡量避免,尤其是在數據量較大的時候。
    如果要將一個打包的對象轉換回原來的值型變量,必須顯性地對它進行解包。解包需要二個步驟:首先對對象實例進行檢查,確保它們是由值型的變量被包裝成的;第二步將實例中的值拷貝到值型變量中。為了確保解包成功,被解包的對象必須是通過打包一個值型變量的值生成的對象的索引。
    using System;
    public class UnboxingTest
    {
    public static void Main()
    {
    int i = 123;
    //打包
    object o = i;
    // 解包(必須是顯性的)
    int j = (int) o;
    Console.WriteLine("j: {0}", j);
    }
    }
    如果被解包的對象是無效的,或是一個不同數據類型對象的索引,就會產生InvalidCastException異外。