《.NET框架程序设计》第5章 基元类型、引用类型与值类型
5.1 基元类型
基元类型可以用快捷语法。比如int a=0;等同于System.Int32 a=new System.Int32();
建议,使用全名,为了代码含义看起来更清晰。
5.1.1 Checked与Unchecked基元类型操作
默认情况下,编译器溢出检查是关闭。使用/checked+命令开启溢出检查。
数值运算溢出会抛出OverflowException异常。
使用/checked-命令关闭溢出检查,使用checked关键字检查溢出,如有溢出抛出。如果没用关键字,有溢出仍然执行程序。
建议,开发程序时开启溢出检查,发布程序时关闭溢出检查。
5.2 引用类型和值类型
值类型从内存栈上分配内存。值类型不受垃圾收集器的控制。
引用类型从内存托管上堆分配内存。所有成为"类"的都是引用类型。
结构与枚举是值类型,继承自System.ValueType类型。值类型不能做基类和派生类。
值类型初始化为0,引用类型初始化为null。
值类型的互相赋值,是内存一大块的拷贝。引用类型的互相赋值,是指针的拷贝。
建议,值类型不要用于频繁调用方法的参数和返回值。因为,值类型的拷贝方式决定。
5.3 值类型的装箱与拆箱
值类型转换成引用类型是装箱。引用类型转换成值类型是拆箱。
装箱与拆箱会消耗内存与速度,尽量减少使用。
什么时候应该手动装箱。
Int32 v=5;
Object o=v;
Console.write("{0},{1},{2}",o,o,o);
因为值类型没有方法表指针,所以不能多个线程对它同步访问。
基元类型可以用快捷语法。比如int a=0;等同于System.Int32 a=new System.Int32();
建议,使用全名,为了代码含义看起来更清晰。
5.1.1 Checked与Unchecked基元类型操作
默认情况下,编译器溢出检查是关闭。使用/checked+命令开启溢出检查。
数值运算溢出会抛出OverflowException异常。
使用/checked-命令关闭溢出检查,使用checked关键字检查溢出,如有溢出抛出。如果没用关键字,有溢出仍然执行程序。
建议,开发程序时开启溢出检查,发布程序时关闭溢出检查。
5.2 引用类型和值类型
值类型从内存栈上分配内存。值类型不受垃圾收集器的控制。
引用类型从内存托管上堆分配内存。所有成为"类"的都是引用类型。
结构与枚举是值类型,继承自System.ValueType类型。值类型不能做基类和派生类。
值类型初始化为0,引用类型初始化为null。
值类型的互相赋值,是内存一大块的拷贝。引用类型的互相赋值,是指针的拷贝。
建议,值类型不要用于频繁调用方法的参数和返回值。因为,值类型的拷贝方式决定。
5.3 值类型的装箱与拆箱
值类型转换成引用类型是装箱。引用类型转换成值类型是拆箱。
装箱与拆箱会消耗内存与速度,尽量减少使用。
什么时候应该手动装箱。
Int32 v=5;
Object o=v;
Console.write("{0},{1},{2}",o,o,o);
因为值类型没有方法表指针,所以不能多个线程对它同步访问。
合乎自然而生生不息。。。