读书笔记_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是用户定义的标识符。
引用类型转换:基类型转换为继承类型必须显式转换,继承类型可隐式转换为基类型。
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是用户定义的标识符。
引用类型转换:基类型转换为继承类型必须显式转换,继承类型可隐式转换为基类型。
相关文章推荐
- 读书笔记_C#技术内幕_第六章(对象和组件概念)
- 读书笔记_C#技术内幕_第二十八章(反射)
- 读书笔记_C#技术内幕_第七章(类的使用)
- 读书笔记_C#技术内幕_第十一章(委托和事件)(委托部分)
- 读书笔记_C#技术内幕_第十七章(文件的输入/输出和串行化)
- 读书笔记_C#技术内幕_第三十章(不安全代码和平台调用)
- 读书笔记_C#技术内幕_第八章(设计面向对象的程序)
- 读书笔记_C#技术内幕_第十一章(委托和事件)(事件部分)
- 读书笔记_C#技术内幕_第二十三章(多线程)
- 读书笔记_C#技术内幕_第二十九章(本地化和资源)
- 读书笔记_C#技术内幕_第十二章(使用命名空间组织代码)
- 读书笔记_C#技术内幕_第二十五章(字符串操作)(String类)
- 读书笔记_C#技术内幕_剩余章节
- 读书笔记_C#技术内幕_第十三章(创建结构)
- 读书笔记_C#技术内幕_第二十五章(字符串操作)(StringBuilder,字符串格式化)
- 读书笔记_C#技术内幕_第二章
- 读书笔记_C#技术内幕_第九章(重载类成员和操作符)
- 读书笔记_C#技术内幕_第十四章(实现接口)
- 读书笔记_C#技术内幕_第二十六章(C#集合)
- 读书笔记_C#技术内幕_第十章(处理异常和错误)