Welcome

首页 / 软件开发 / C# / C#的隐式引用转换

C#的隐式引用转换2007-09-10 本站 隐式引用转换包括以下几类:

●从任何引用类型到对象类型的转换

●从类类型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[];