隱式引用轉換包括以下幾類:
●從任何引用類型到對象類型的轉換
●從類類型s到類類型t的轉換,其中s是t的派生類。
●從類類型s到接口類型t的轉換,其中類s實現了接口t。
●從接口類型s到接口類型t的轉換,其中t是s的父接口。
從元素類型為Ts的數組類型S向元素類型為Tt的數組類型T轉換,這種轉換需要滿足下列條件:
●S和T只有元素的數據類型不同,但它們的維數相同。
●Ts和Tt都是引用類型。
●存在從Ts到Tt的隱式引用轉換
●從任何數組類型到System.Array的轉換。
●從任何代表類型到System.Delegate的轉換。
●從任何數據類型或代表類型到System.ICLoneable的轉換。
●從空類型(null)到任何引用類型的轉換。
比如,下面的程序無法通過編譯,因為數組的元素類型是值類型,C#中不存在這樣的隱式轉換。
程序清單6-3:
using System; class Test { public static void Main(){ float[] float_arr=new float[10]; int[] int_arr=new int[10]; float_arr=int_arr; } }
而下面這段程序則是正確的: 程序清單6-4: using System; class Class1 {} class Class2:Class1 {} class Test { public static void Main(){ Class1[] class1_arr=new Class1[10]; class2[] class2_arr=new Class2[10]; class1_arr=class2_arr; } }
程序6-5很有趣,它給出了我們常用的值類型在系統環境中的原型定義。
程序6-5:
using System; class Test { public static void Main(){ float[] float_arr=new float[10]; double[] double_arr=new double[10]; sbyte[] sbyte_arr=new sbyte[10]; byte[] byte_arr=new byte[10]; ushort[] ushort_arr=new ushort[10]; int[] int_arr=new int[10]; long[] long_arr=new long[10]; string[] string_arr=new string[10]; console.WriteLine(float_arr); Console.WriteLine(double_arr); Console.WriteLine(sbyte_arr); Console.WriteLine(byte_arr); Console.WriteLine(ushort_arr); Console.WriteLine(int_arr); Console.WriteLine(long_arr); Console.WriteLine(string_arr); } } 程序的輸出結果是: System.Single[]; System.Double[]; System.Sbyte[]; System.Byte[]; System.Int16[]; system.Int32[]; System.Int64[]; System.String[];