C#中装箱和拆箱的作用 the effection of boxing and unboxing
来源:互联网 发布:反映数据稳定性的指标 编辑:程序博客网 时间:2024/05/01 12:06
值类型和引用类型放在不同的地方,在互相转换的时候需要把数据搬过来搬过去,这就是装箱和拆箱了.
在于类型的转换
例如一个函数要处理传入的参数,但是这个参数可能是A、C、E这三种类型的类,那么一般做法就是重载函数。如果要是使用box和unbox的话,就可以把形参设定为object类型的,然后再用gettype来确定到底是哪种类型的类被传来处理。明白不?写个例子吧:
private void DisposeFunc( object O )
{
switch( o.getType().ToString() )
{
case "A": //处理A;
case "C": //处理C;
。。。。。。。。。。。。。。
}
}
有时封箱和拆箱操作会影响应用程序效率,可以看看.net 框架设计这本书.
关于装箱和拆箱,往往是在对值类型进行的操作,目的是将值类型数据从在栈上的存储转移到堆上,这样就和普通Object具有了同样的存储解构:栈上存储地址,堆上存储数据.这样就可以达到统一处理的效果.
装箱和拆箱的意义可以理解为值类型和引用类型的转换...要理解转换的意义,你就必须要先了解值类型和引用类型的区别和特点...
当你把一个值类型赋予给另外一个值类型,则会在堆栈中复制一个副本.修改值类型的数据,则不会影响到另一个数据值..而引用类型的赋值.把一个引用变量赋予另一个引用变量,则复制的是引用,而非内存值,所以,修改一个变量会影响到另外一个引用.
如果再深入了解的话,你会发现类型转换之间的关系对于性能的影响和操作的结果是很大的..看下面的这个例子:
string s = 10.ToString();
上面的代码的用拆箱的形式实现,代码表现为:
int i = 10; //在栈上分配一个int类型
object o = i; //把栈上的数据移到堆中,进行拆箱操作
string s = o.ToString(); //转换数据
装箱和拆箱 就是把值类型转为引用形或把引用形转为值,就是为了通用,但是会影响效率。虽然书上说尽量减少使用,其实大部分情况下不计较这个。因为如把一个方法的参数设置为object实在太方便。
装箱的目的,是为了解决未知参数类型传入的问题,装箱操作的产生有它的历史性.但是目前,已经重载和泛型,所以装箱已经没有使用的太大意义了.因为装箱的过程会产生额外的系统消耗,影响效率.
- C#中装箱和拆箱的作用 the effection of boxing and unboxing
- C#装箱和拆箱(Boxing 和 UnBoxing)
- C#装箱(Boxing)和拆箱(Unboxing)
- C#中的装箱(Boxing)和拆箱(Unboxing)
- 装箱和拆箱(boxing&unboxing)-.NET
- .NET中六个你必须知道的重要概念之装箱(boxing)和拆箱(unboxing)
- 装箱(Boxing)和拆箱(Unboxing)
- 装箱(Boxing)和拆箱(Unboxing)
- [转]装箱(Boxing)和拆箱(Unboxing)
- 装箱(boxing)和拆箱(unboxing)
- C#——装箱(boxing)和拆箱(unboxing)
- java 自动拆箱(unboxing)和自动装箱(boxing)
- 自动装箱(boxing)和自动拆箱(unboxing)
- 装箱(boxing)和拆箱(unboxing) [转]
- 减少装箱(Boxing)和拆箱(Unboxing)操作(感觉有用,抄过来的)
- Boxing and unboxing in C#
- C#学习日记18----装箱(boxing)转换与拆箱(unboxing)转换
- C#中的"装箱"(boxing)与"拆箱"(unboxing)
- ''\r\n"才是换行
- Android实现Filterable通过输入文本框实现联系人自动筛选...
- 如何用UltraISO刻录iso文件到U盘上
- jsp中利用分页技术显示数据库内容
- javamail——初接触
- C#中装箱和拆箱的作用 the effection of boxing and unboxing
- 链接,静态库和动态库
- 安卓基础学习_Intent和IntentFilter
- JAVA对象引用和值引用
- 在MFC SDI程序中使用SDL
- 配置tomcat用catalina start启动
- (work and tools)ubuntu nfs配置
- linux gdb 调试技巧
- 线性规划