您的位置:首页 > 编程语言 > C#

读书笔记_C#技术内幕_第十五章(执行转换)

2008-09-07 12:31 337 查看
转换是指把对象从一种类型改变为另外一种类型的能力。这是运行时刻与编译时间的特性。转换有显式的和隐式的。在进行自动转换时,就会进行隐式转换,当有错误或数据丢失的可能性就会调用显式转换。
C#有基本数据类型的内置的转换机制。在设计一个新的类时,程序员也能够创建自己的转换。这就提供了一个用户定义的类型与另外一个用户定义的类型或基本类型之间的互相转换的能力。

隐式转换与显式转换:
当把一个较小的类型转换成一个较大的类型时,会自动发生隐式转换。如:
int myInt = 5;
long myLong = myInt; // 隐式转换

当把一个较大的类型转换成一个较小的类型或者可以产生任何错误的情况下,需要进行显式转换。如:
long myLong = 5;
int myInt = (int)myLong;

int mySigned = -1;
unit myUnsigned = (uint)mySigned; // myUnsigned = 4294967295

唯一允许的隐式的枚举转换是转换整型值0(零)为枚举。其它的枚举转换都是显式的。如:
enum CurrencyType
{
Dollar, Euro, Franc, Lire
};

CurrencyType myCurrType = 0; // myCurrType = Dollar

通常隐式进行的转换也能够显式的进行。在进行隐式转换的地方进行显式转换不会改变转换的结果。该结果就是单独进行隐式转换的结果。它只是可以显式的进行转换而已。

从double类型到float类型的显式转换可以获得各种不同的结果。double类型转换成float类型时被圆整。如果double类型的值小于float能够容纳的值,结果值就是零。当double的值大于float能够容纳的值,结果值就会是正的或负的无穷大。双精度浮点型(double)显式转换到单精度浮点型(float)时,如果其中double是NaN,则float中的结果也是NaN。
double或float转换为decimal类型时,结果会四舍五入到第二十八位。值太小就会为零。如果值太大,以致十进制不能够表示,就会是无穷大或NaN,会抛出OverflowException异常。但是从decimal到double或float,结果会丢失精度,但是不会抛出异常。

值类型转换:
public static convType operator toType(fromType typeName)
{
// conversion code
}
其中的public和static修饰符是必不可少的。其中的convType可以是关键字implicit或explicit。其中的operator关键字也是必不可少的。转换涉及toType和fromType两种类型。其中之一是包围的类或结构的类型。另一个是要转换到的或从其中转换的类型。其中formType是源类型,而toType是目的或目标类型。TypeName是用户定义的标识符。

引用类型转换:基类型转换为继承类型必须显式转换,继承类型可隐式转换为基类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: