引用类型与值类型

相信很多同学已经开始了WPF的学习,要想学好WPF,不能不熟悉C#语言的使用和理论部分,所以今天我给大家讲解一个C#的知识点,希望能让大家更了解这门计算机语言。

  在C#中的数据,有两个类型:值类型和引用类型,先说概念:值类型直接存储其值,而引用类型存储对其值的引用。在部署上,引用类型一般存放在堆中。

byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型,string 和 class统称为引用类型。

我们先来看一段代码感受一下

在上述代码中,我们分别修改了两个值,看看会得到什么结果;

我们可以看到,Stamp_2 Name 的值和 guru Name的值一起被改变了。而令一组

并没有,之所以发生这种情况,就是因为值类型和引用类型的不同。

我们可以简单理解成:Stamp_1.age的值给到 int Age之后,实际上就是将22

存到了值类型int Age中,后续Age的值不会因为Stamp_1.age的值的改变而改

变。而引用类型存放的只是一个它引用目标的地址,可以理解成一个传送门,把

你传送给它引用的目标那里。而这个引用的目标的值改变之后,引用类型的值当

然也会改变。

值类型和引用类型的区别:(小结)

相同点:

引用类型可以实现接口,值类型当中的结构体也可以实现接口;

引用类型和值类型都继承自System.Object类。

 

1)范围方面

C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。

C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

2)内存分配方面:

数组的元素不管是引用类型还是值类型,都存储在托管堆上。

引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放)

3)适用场合

值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封(seal)的;

引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型,如   int? a = null;  );

引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值