CLR Via C# 第五章(基元类型,引用类型与值类型)(1)——读书笔记

基元类型,引用类型与值类型

1.基元类型

基元类型:编译器直接支持的概念称作基元类型
简单来说,就是int,char,bool这些基本类型,基元类型会直接映射到Framework类库(FCL)中的类型,
如int会映射到System.Int32类型,所以,

int a=0;
System.Int32 b=0;

两者等价,都会编译生成成相同的IL
直接使用FCL类型名称,更能够解决概念误差。

2.check与unchecked操作符

这两个操作符能够对单个表达式或域进行溢出的检查与否进行操作,若检查到溢出,则CLR会抛出OverflowException异常。
这个主要用于计算校验等。

3.引用类型与值类型

CLR支持两种类型:值类型与引用类型

引用类型总是从托管堆分配,C#中用new操作符返回对象内存地址,即指向对象数据的内存地址。

  • 引用对象本身保存的是对象的内存地址
  • 引用类型对象中其他字节(字段)总设为0
  • 从托管堆分配对象时,可能强制执行一次垃圾回收

值类型的实例则一般在线程栈分配。

  • 值类型对象本身包含了实例的字段,所以不包含指针
  • 不受垃圾回收器控制

区分:任何称为类的类型都是引用类型,所有值类型都称为结构或枚举

private static class ReferenceVsValue {
      // Reference type (because of 'class')
      private class SomeRef { public Int32 x; }

      // Value type (because of 'struct')
      private struct SomeVal { public Int32 x; }

      public static void Go() {
         SomeRef r1 = new SomeRef();   // Allocated in heap
         SomeVal v1 = new SomeVal();   // Allocated on stack
         r1.x = 5;                     // Pointer dereference
         v1.x = 5;                     // Changed on stack
         Console.WriteLine(r1.x);      // Displays "5"
         Console.WriteLine(v1.x);      // Also displays "5"
         // The left side of Figure 5-2 reflects the situation
         // after the lines above have executed.

         SomeRef r2 = r1;              // **Copies reference (pointer) only**
         SomeVal v2 = v1;              // Allocate on stack & copies members
         r1.x = 8;                     // Changes r1.x and r2.x
         v1.x = 9;                     // Changes v1.x, not v2.x
         Console.WriteLine(r1.x);      // Displays "8"
         Console.WriteLine(r2.x);      // Displays "8"
         Console.WriteLine(v1.x);      // Displays "9"
         Console.WriteLine(v2.x);      // Displays "5"
         // The right side of Figure 5-2 reflects the situation 
         // after ALL the lines above have executed.
      }
   }

内存分配对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值