隱式引用轉換包括以下幾類:
●從任何引用類型到對象類型的轉換
●從類類型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[];