C#的隐式引用转换

隐式引用转换包括以下几类:

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索class
, new
, int64_t
, 类型
, system
, console
, 空指针 隐式类型转换
, WriteLine
, 隐式类型转换
, js隐式类型转换
隐式接口
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-11 14:33:21

C#的隐式引用转换的相关文章

C#的显式引用转换

显式引用转换包括: ●从对象到任何引用类型 ●从类类型S到类类型T,其中S是T的基类. ●从基类型S到接口类型T,其中S不是密封类,而且没有实现T. ●从接口类型S到类类型T,其中T不是密封类,而且没有实现S. ●从接口类型S到接口类型T,其中S不是T的子接口. 从元素类型为Ts的数组类型S到元素类型为Tt的数组类型T的转换,这种转换需要满足下列条件: ●S和T只有元素的数据类型不同,而维数相同. ●Ts和Tt都是引用类型. ●存在从Ts到Tt的显式引用转换. ●从System.Array到数组

C#的隐式枚举转换

隐式枚举转换允许把十进制整数0转换成任何枚举类型,对应其它的整数则不存在这种隐式转换.还是让我们用例子来说明. 程序清单6-2: using System; enum Weekday{ Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday }; class Test { public static void Main(){ Weekday day; day=0; Console.WriteLine(day); } } 程序的输出是: 0

C#的隐式数值转换

隐式数值转换包括以下几种: ●从sbyte类型到short,int,long,float,double,或decimal类型. ●从byte类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型. ●从short类型到int,long,float,double,或decimal类型. ●从ushort类型到int,uint,long,ulong,float,double,或decimal类型. ●从int类型到long,float,

MySQL5.7 : 对隐式锁转换的优化

MySQL5.7 : Reduce lock_sys_t::mutex contention when converting implicit lock to an explicit lock worklog: http://dev.mysql.com/worklog/task/?id=6899 Rev: http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/5743 背景: 1.什么是隐式锁 所谓的隐式锁,可以理解成一个记录标

跟我学习javascript的隐式强制转换_javascript技巧

JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object. object是引用类型,其它的五种是基本类型或者是原始类型.我们可以用typeof方法打印来某个是属于哪个类型的.不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换.隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等.. typeof '11' //string typeof(11) //number '11' < 4 //false 一.基

C++:模板类使用成员函数模板处理隐式(implicit)转换

指针支持隐式转换(implicit conversion), 在动态绑定中,派生类指针可以转换为基类指针. 但是模板的实例化(instantiations)之间, 是单独存在的, 派生类的实例化的模板(SmartPtr<Derived>), 不能转换为基类实例化的模板(SmartPtr<Base>); 需要明确的编写, 因为派生类也可以继续做为基类, 产生派生类, 所以无法直接写出构造函数. 使用成员函数模板(member function template), 再声明一个模板参数

关于隐式对象转换问题

问题描述 privateSqlParameterobjparm;objparm.SourceVersion=objSqlDataAdapter.InsertCommand.Parameters.Add(newSystem.Data.SqlClient.SqlParameter("@Description",System.Data.SqlDbType.VarChar,50));提示错误:无法将类型System.Data.SqlClient.SqlParameter隐式转换为 System

C#的隐式类型转换

在C#语言中,一些预定义的数据类型之间存在着预定义的转换.比如,从int类型转换到long类型.C#语言中数据类型的转换可以用分为两类:隐式转换(implicit conversions)和显式转换(explicit conversions).本章我们将详细介绍这两类转换. 6.1 隐式类型转换 隐式转换就是系统默认的.不需要加以声明就可以进行的转换.在隐式转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换.比如从int类型转换到long类型就是一种隐式转换.隐式转换一般不会失败,转换

隐式的类类型转换

如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,有时我们把这种构造函数称作转换构造函数. 能通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则. 例如,在Sales_data类中,接受string的构造函数和接受istream的构造函数分别定义了从这两种类型向Sales_data隐式转换的规则.也就是说,在需要使用Sales_data的地方,我们可以使用string或者istream作为替代: 构造函数:Sales_data(const st