C#中Boxing和Unboxing的区别是什么

这期内容当中小编将会给大家带来有关C#中Boxing和Unboxing的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比宣汉网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式宣汉网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖宣汉地区。费用合理售后完善,十载实体公司更值得信赖。

值类型在赋值操作(“=”操作,函数参数,函数返回等)的时候,会把所有成员变量拷贝一遍给目标实例。

引用类型在赋值操作的时候,只是把实例的内存中的地址赋值给目标实例。

那么这两者有什么区别呢?

那就是效率了:

引用类型的赋值只要传递一个内存地址,传递的数据量就是一个32(64位操作系统是64)位整数。

值类型需要传递该类型所包含的所有数据。

比如:

struct Point  {  public int x;  public int y;  }

那Point类型的实例在赋值的时候,要传递的数据量是两个整数。

如果数据量更大的结构,每次赋值的时候都要传递一遍所有的成员,那么总的程序运行期内,传递的数据量就非常可观了。

怎么解决这种效率问题呢?

有两种方法:

1 使用ref关键字。

2 就是用所谓的Boxing和Unboxing了。

首先,C#中Boxing和Unboxing是针对值类型数据而言的。对引用类型来说,它本身就是引用类型,所以不存在Boxing和Unboxing的概念。

其次,Boxing的操作就是把值类型的数据赋值到一个object的引用类型实例中,这个过程是值赋值的过程(就是所以数据都copy一遍)。

如:

Point p = new Point{x=10, y=11};

Object o = p;

这个变量o就是Boxing之后的引用类型了。记住一点,boxing之后,变量o就跟p无关了,它们是两个不同类型的变量,指向不同的内存地址。

***,Unboxing的操作是把这个object的引用类型实例,以值传递的方式赋值给目标对象。

如:

Point p2 = (Point)o;

unboxing之后,p2跟o就无关了,它们是两个不同类型的变量,指向不同的内存地址。

也就是说,Boxing和Unboxing的***用途就是用于数据传递。

理解Boxing和Unboxing还要与class的类型向父类/子类转换的操作区别开来(面向对象语言的继承机制)。

将一个class的实例转换成它的父类或子类类型,这是类的继承机制。这种转换其实只是把实例的类型信息变了下,实例对应的数据,内存地址都没变动。转换前后的实例都是指向同一块内存。

上述就是小编为大家分享的C#中Boxing和Unboxing的区别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。

文章标题:C#中Boxing和Unboxing的区别是什么
网页URL:https://www.cdcxhl.com/article16/gpssdg.html

成都网站建设公司_创新互联,为您提供移动网站建设面包屑导航网站营销搜索引擎优化网站建设服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营