隐式引用转换包括以下几类:
●从任何引用类型到对象类型的转换
●从类类型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[];
本文来自编程入门网:http://www.bianceng.cn/Programming/csharp/200709/4343.htm