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);
因为值类型没有方法表指针,所以不能多个线程对它同步访问。

相关文章:

  • 2022-12-23
  • 2021-08-26
  • 2021-10-27
  • 2021-12-24
  • 2021-10-26
  • 2022-02-04
  • 2021-10-13
猜你喜欢
  • 2021-09-19
  • 2021-06-25
  • 2022-12-23
  • 2021-06-06
  • 2022-12-23
  • 2022-02-17
  • 2022-01-05
相关资源
相似解决方案