C#的值类型与引用类型

上面是MSDN里关于C#语言里类型的分类。

1.值类型

 1.1 定义

何为值类型?许多工具书说得很专业化,值类型分配在线程堆栈上,本身就是实例化的类型。说白了,它完完整整地生存活在程序所在的内存堆栈,没有额外占用其它的内存空间。

 1.2 生命周期

前面说了,它存在线程的堆栈内,所在作用域结束,它就结束。

 1.3 应用原理

把一个值类型赋给别一个值类型,实际是在线程堆栈上新创一个空间,把原来的数据作一个数据拷贝。 改变其中一个值不会影响另一个值。

  • 值类型其实也就是“轻量级”类型。把像byte这样简单的数据直接分配在程序线程堆栈里,不需要动用GC进行内存回收,所以在性能优于引用类型,处理较小的数据时有明显的优势。
  • 类型不需要表现出行为时,不需要类来实现。如果类型以存存储数据为目的时,值类型作优先选择;
  • 值类型没有继承,多态,封装等面向对面象的功能,结构简单。因此在不必多态的情况下,优先考虑值类型;
  • 值类型作为参数传递时,传递的时实例数据,不暴露数据的内存结构,安全性能较高。但过多的使用会折损性能;
  • 值类型不能为null,初始化时自动设为0.

2. 引用类型

 2.1 定义

引用类型的实例数据存储在托管堆上,变量存储是实际上是实例数据的内存引用。

 2.2 生命周期

存储在托管堆里的实例数据会由GC进行回收。

 2.3 应用原理

把一个引用类型赋给另一个引用类型,实际是把实例数据的引用地址赋给第二个引用类型,改变其实一个的值会跟着影响另一个的值。

  • 引用类型有继承、多态、封装的面向对象功能,有较大的灵活性。如果类型需要表现行为,则采用引用类型;
  • 在默认的情况下,引用类型创建为null,表示没有指向任何引用地址。对指向null的引用类型任何操作,会引发NullReferenceException.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值