《.NET框架程序设计》第五章 基元类型、引用类型与值类型

来源:互联网 发布:阿里云自动化测试 编辑:程序博客网 时间:2024/06/05 00:37

一、基元类型(primitive type)编译器直接支持的数据类型。

引用类型(reference type)总是从托管堆上进行分配。内存的回收通过垃圾收集器。

值类型(value type)通常分配在线程的堆栈中(当然,也可以被嵌入到一个引用类型的对象中)。值类型实例不受垃圾收集器的控制。

 

二、尽量使用FCL类型名:在开发中,尽量使用FCL类型名,也就是System.StringSystem.Int32等等。而不要使用stringint等基元类型名。因为FCL类型名具体的可以看出类型的一些限制,如Int32就是表示32位的有符号数,比较直观;另外,一些基元类型和对应的FCL类型名称不相同,容易引起混淆,如基元类型float对应的FCL类型名是System.Single;最后,同一个基元类型,可能在不同的编程语言中对应不同的FCL类型,这就会带来了一系列的潜在的问题。

三、类型转换:可以使用System.Convert类型的静态方法在不同类型的对象之间进行转型。Convert类型中的静态方法ChangeType可以将一个类型转换为另外一个任意的类型,前提是被转换类型实现了Iconvertible接口,特别是其中的ToType方法。(是否可以利用这个技术来实现点什么新的功能??)

四、溢出的异常的控制:许多基元类型的算术运算都会导致结果溢出,缺省情况下,这种溢出是不会抛出异常的,可以使用/checked+命令行开关告诉编译器使用带溢出的IL指令来产生代码。(如何在开发环境中打开这个开关??)另一种方法是在代码中使用checkedunchecked操作符来开关一段代码的溢出检查。我个人觉得没有必要使用checkedunchecked操作符来做这种精细的控制,虽然直接打开编译器的溢出检测开发会降低一些应用程序的性能,但是这种影响可以不必考虑。

五、引用类型和值类型的区别:任何都是引用类型,任何结构枚举都是值类型。另外,所有的值类型都必须继承自System.ValueType类型。CLR不允许一个值类型被用作基类型。

六、值类型的装箱与拆箱:当需要尽量提高一段程序的执行性能时,可以对这段程序进行分析,尽量减少其中的装箱和拆箱的操作。而之所以很多方法都提供了重载的版本,目的之一就是减少一些常用值类型的装箱操作。

原创粉丝点击