《.NET框架程序设计》第五章 基元类型、引用类型与值类型
2004-09-02 20:09
369 查看
一、基元类型[/b](primitive type)[/b]:[/b]编译器直接支持的数据类型。
引用类型[/b](reference type)[/b]:[/b]总是从托管堆上进行分配。内存的回收通过垃圾收集器。
值类型[/b](value type)[/b]:[/b]通常分配在线程的堆栈中(当然,也可以被嵌入到一个引用类型的对象中)。值类型实例不受垃圾收集器的控制。
二、尽量使用[/b]FCL[/b]类型名:[/b]在开发中,尽量使用FCL类型名,也就是System.String,System.Int32等等。而不要使用string,int等基元类型名。因为FCL类型名具体的可以看出类型的一些限制,如Int32就是表示32位的有符号数,比较直观;另外,一些基元类型和对应的FCL类型名称不相同,容易引起混淆,如基元类型float对应的FCL类型名是System.Single;最后,同一个基元类型,可能在不同的编程语言中对应不同的FCL类型,这就会带来了一系列的潜在的问题。
三、类型转换:[/b]可以使用System.Convert类型的静态方法在不同类型的对象之间进行转型。Convert类型中的静态方法ChangeType可以将一个类型转换为另外一个任意的类型,前提是被转换类型实现了Iconvertible接口,特别是其中的ToType方法。(是否可以利用这个技术来实现点什么新的功能??)
四、溢出的异常的控制:[/b]许多基元类型的算术运算都会导致结果溢出,缺省情况下,这种溢出是不会抛出异常的,可以使用/checked+命令行开关告诉编译器使用带溢出的IL指令来产生代码。(如何在开发环境中打开这个开关??)另一种方法是在代码中使用checked和unchecked操作符来开关一段代码的溢出检查。我个人觉得没有必要使用checked和unchecked操作符来做这种精细的控制,虽然直接打开编译器的溢出检测开发会降低一些应用程序的性能,但是这种影响可以不必考虑。
五、引用类型和值类型的区别:[/b]任何”类”都是引用类型,任何”结构”和”枚举”都是值类型。另外,所有的值类型都必须继承自System.ValueType类型。CLR不允许一个值类型被用作基类型。
六、值类型的装箱与拆箱:[/b]当需要尽量提高一段程序的执行性能时,可以对这段程序进行分析,尽量减少其中的装箱和拆箱的操作。而之所以很多方法都提供了重载的版本,目的之一就是减少一些常用值类型的装箱操作。
引用类型[/b](reference type)[/b]:[/b]总是从托管堆上进行分配。内存的回收通过垃圾收集器。
值类型[/b](value type)[/b]:[/b]通常分配在线程的堆栈中(当然,也可以被嵌入到一个引用类型的对象中)。值类型实例不受垃圾收集器的控制。
二、尽量使用[/b]FCL[/b]类型名:[/b]在开发中,尽量使用FCL类型名,也就是System.String,System.Int32等等。而不要使用string,int等基元类型名。因为FCL类型名具体的可以看出类型的一些限制,如Int32就是表示32位的有符号数,比较直观;另外,一些基元类型和对应的FCL类型名称不相同,容易引起混淆,如基元类型float对应的FCL类型名是System.Single;最后,同一个基元类型,可能在不同的编程语言中对应不同的FCL类型,这就会带来了一系列的潜在的问题。
三、类型转换:[/b]可以使用System.Convert类型的静态方法在不同类型的对象之间进行转型。Convert类型中的静态方法ChangeType可以将一个类型转换为另外一个任意的类型,前提是被转换类型实现了Iconvertible接口,特别是其中的ToType方法。(是否可以利用这个技术来实现点什么新的功能??)
四、溢出的异常的控制:[/b]许多基元类型的算术运算都会导致结果溢出,缺省情况下,这种溢出是不会抛出异常的,可以使用/checked+命令行开关告诉编译器使用带溢出的IL指令来产生代码。(如何在开发环境中打开这个开关??)另一种方法是在代码中使用checked和unchecked操作符来开关一段代码的溢出检查。我个人觉得没有必要使用checked和unchecked操作符来做这种精细的控制,虽然直接打开编译器的溢出检测开发会降低一些应用程序的性能,但是这种影响可以不必考虑。
五、引用类型和值类型的区别:[/b]任何”类”都是引用类型,任何”结构”和”枚举”都是值类型。另外,所有的值类型都必须继承自System.ValueType类型。CLR不允许一个值类型被用作基类型。
六、值类型的装箱与拆箱:[/b]当需要尽量提高一段程序的执行性能时,可以对这段程序进行分析,尽量减少其中的装箱和拆箱的操作。而之所以很多方法都提供了重载的版本,目的之一就是减少一些常用值类型的装箱操作。
相关文章推荐
- .Net框架程序设计-读书笔记(第五章 基元类型、引用类型和值类型)
- CLR Via C# 第五章(基元类型,引用类型与值类型)(2)——读书笔记
- 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型
- 第五章 基元类型、引用类型、值类型 CLR学习第五课
- 第五章 基元类型、引用类型 和 值类型
- CLR Via C# 第五章(基元类型,引用类型与值类型)(1)——读书笔记
- 《.NET框架程序设计》第5章 基元类型、引用类型与值类型
- Read the "clr via C#" of 基元类型,引用类型,值类型(第五章)
- 第五章 基元类型引用类型和值类型
- 跟小静读CLR via C#(02)-基元类型、引用类型、值类型
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
- js第五章引用类型
- Javascript高级程序设计第二版第五章--引用类型--笔记
- 第五章:引用类型(基本包装类型:Boolean、Number和String)
- 第5章:基元类型、引用类型和值类型(一)
- Javascript高级程序设计第二版第五章--引用类型--笔记
- 基元类型、引用 类型与值类型
- 第五章:引用类型(Function类型和内置对象 简略版)
- 第五章:引用类型
- 第五章 引用类型(上)