- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6. 转换
转换使一种类型的表达式可以被视为另一种类型。转换可以是隐式或显式,这将确定是否需要显式地强制转换。例如,从 int 类型到 long 类型的转换是隐式的,因此 int 类型的表达式可隐式地按 long 类型处理。从 long 类型到 int 类型的反向转换是显式的,因此需要显式地强制转换。
int a = 123;
long b = a; // implicit conversion from int to long
int c = (int) b; // explicit conversion from long to int
某些转换由语言定义。程序也可以定义自己的转换(第 6.4 节)。
6.1 隐式转换
下列转换属于隐式转换:
标识转换
隐式数值转换
隐式枚举转换
隐式引用转换
装箱转换
隐式常数表达式转换
用户定义的隐式转换
隐式转换可以在各种情况下发生,包括函数成员调用(第 7.4.3 节)、强制转换表达式(第 7.6.6 节)以及赋值(第 7.13 节)。
预定义的隐式转换总是会成功,从来不会导致引发异常。正确设计的用户定义隐式转换同样应表现出这些特性。
6.1.1 标识转换
标识转换是在同一类型(可为任何类型)内进行转换。这种转换的存在,仅仅是为了使已具有所需类型的实体可被认为是可转换的(转换为该类型)。6.1.2 隐式数值转换
隐式数值转换为:
从 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、double 或 decimal。
从 uint 到 long、ulong、float、double 或 decimal。
从 long 到 float、double 或 decimal。
从 ulong 到 float、double 或 decimal。
从 char 到 ushort、int、uint、long、ulong、float、double 或 decimal。
从 float 到 double。
从 int、uint、long 或 ulong 到 float 以及从 long 或 ulong 到 double 的转换可能导致精度损失,但决不会影响到它的数量级。其他的隐式数值转换决不会丢失任何信息。
不存在向 char 类型的隐式转换,因此其它整型的值不会自动转换为 char 类型。
6.1.3 隐式枚举转换
隐式枚举转换允许将十进制整数 0 转换为任何枚举类型。6.1.4 隐式引用转换
隐式引用转换为:
从任何引用类型到 object。
从任何类类型 S 到任何类类型 T(前提是 S 是从 T 派生的)。
从任何类类型 S 到任何接口类型 T(前提是 S 实现了 T)。
从任何接口类型 S 到任何接口类型 T(前提是 S 是从 T 派生的)。
从元素类型为 SE 的数组类型 S 到元素类型为 TE 的数组类型 T(前提是以下所列的条件均为真):
S 和 T 只是元素类型不同。换言之,S 和 T 具有相同的维数。
SE 和 TE 都是引用类型。
存在从 SE 到 TE 的隐式引用转换。
从任何数组类型到 System.Array。
从任何委托类型到 System.Delegate。
从 null 类型到任何引用类型。
隐式引用转换是指一类引用类型之间的转换,这种转换总是可以成功,因此不需要在运行时进行任何检查。
引用转换无论是隐式的还是显式的,都不会更改所转换的对象的引用标识。换言之,虽然引用转换可能改变该引用的类型,但决不会更改所引用对象的类型或值。
6.1.5 装箱转换
装箱转换允许将值类型隐式转换为引用类型。将值类型的一个值装箱包括以下操作:分配一个对象实例,然后将值类型的值复制到该实例中。
有关装箱转换的介绍详见第 4.3.1 节。
6.1.6 隐式常数表达式转换
隐式常数表达式转换允许进行以下转换:
int 类型的常数表达式(第 7.15 节)可以转换为 sbyte、byte、short、ushort、uint 或 ulong 类型(前提是常数表达式的值在目标类型的范围内)。
long 类型的常数表达式可以转换为 ulong 类型(前提是常数表达式的值不为负)。 6.1.7 用户定义的隐式转换
文档评论(0)