您所在的位置: 首页>>读书频道>>设计开发>>.Net系列>>

6.5 用户定义的数据类型转换

http://book.51cto.com  2007-12-14 14:33  Christian Nagel等著 李铭 译 黄静 审校  清华大学出版社  我要评论(0)
  • 摘要:《C#2005&.NET_3.0高级编程》(第5版)第六章介绍的是基本语言元素和C#语言的扩展功能。本文主要介绍的是用户定义的数据类型转换。
  • 标签:C#  .NET  数据  C++  C#2005&.NET_3.0高级编程

6.5  用户定义的数据类型转换

本章前面介绍了如何在预定义的数据类型之间转换数值,这是通过数据类型转换过程来完成的。C#允许进行两种不同数据类型的转换:隐式转换和显式转换。

显式转换要在代码中显式标记转换,其方法是在圆括号中写出目标数据类型:

   int I = 3;
   long l = I;             // implicit
   short s = (short)I;       // explicit

对于预定义的数据类型,当数据类型转换可能失败或丢失某些数据时,需要显式转换。    例如:

● 把int转换为short时,因为short可能不够大,不能包含转换的数值。
● 把有符号的数据转换为无符号的数据,如果有符号的变量包含一个负值,会得到不正确的结果
● 在把浮点数转换为整数数据类型时,数字的小数部分会丢失。
● 把可空类型转换为非可空类型,null值会导致异常。

此时应在代码中进行显式转换,告诉编译器你知道这会有丢失数据的危险,因此编写代码时要把这种可能性考虑在内。

C#允许定义自己的数据类型(结构和类),这意味着需要某些工具支持在自己的数据类型之间进行类型转换。方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须标记为隐式或显式,以说明如何使用它。我们应遵循与预定义数据类型转换相同的规则,如果知道无论在源变量中存储什么值,数据类型转换总是安全的,就可以把它定义为隐式转换。另一方面,如果某些数值可能会出错,例如丢失数据或抛出异常,就应把数据类型转换定义为显式转换。

提示:
如果源数据值会使数据类型转换失败,或者可能会抛出异常,就应把定制数据类型转换定义为显式转换。

定义数据类型转换的语法类似于本章前面介绍的重载运算符。但它们是不一致的,数据类型转换在某种情况下可以看作是一种运算符,其作用是从源类型转换为目标类型。为了说明这个语法,下面的代码是从本节后面介绍的结构Currency示例中节选的:

public static implicit operator float (Currency value)
{
   // processing
}

运算符的返回类型定义了数据类型转换操作的目标类型,它有一个参数,即要转换的源对象。这里定义的数据类型转换可以隐式地把Currency的值转换为float型。注意,如果数据类型转换声明为隐式,编译器可以隐式或显式地使用这个转换。如果数据类型转换声明为显式,编译器就只能显式地使用它。与其他运算符重载一样,数据类型转换必须声明为public和static。

注意:
C++开发人员应注意,这种情况与C++是不同的,在C++中,数据类型转换是类的实例成员。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
重复数据删除技术
Sun以10亿美元并购开源数据库厂商MySQL
C++是垃圾语言?!
VC++基础开发专题
Oracle数据库开发之PL/SQL基础应用
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有