从值类型接口转换到引用类型装箱。
从引用类型转换到值类型拆箱。
通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够统一考察系统,任何类型的值最终都可以按照对象进行处理.
.NET如何解决这个问题得了?正是通过将类型分成值型(value )和引用型(regerencetype ),C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal )、枚举(enum )、结构(struct ),引用类型包括:类、数组、接口、委托、字符串等。
值型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;
引用型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的,值型不用,超出了作用范围,系统就会自动释放!
下面就来说装箱和拆箱的定义!
装箱就是隐式的将一个值型转换为引用型对象 。比如:
int i=0;
Syste.Object obj=i;
这个过程就是装箱!就是将i装箱!
拆箱就是将一个引用型对象转换成任意值型 !比如:
int i=0;
System.Object obj=i;
int j=(int)obj;
这个过程前2句是将i装箱,后一句是将obj拆箱!
再写个代码,看看进行了几次装拆箱!
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
其中共发生了3次装箱和一次拆箱!看出来了么?!
第一次是将i装箱,第2次是输出的时候将i转换成string 类型,而string 类型为引用类型,即又是装箱,第三次装箱就是(int)obj 的转换成string 类型,装箱!
拆箱就是(int)obj ,将obj 拆箱!!
在 C# 中,将类和数组等都归为了引用型的,那么值类型和引用型有什么区别呢?
( 2 )之后, a,b 均为 0 ,但是( 3 )之后, b=5, a=0; 对 b 的重新附值并不影响 a
}
class text{
public static void main()
{
valueclass a=new
valueclass a=b;
b.value=5;
Console.WriteLine(“{0},{1}”,a.value,b.value);
}
}
输出结果:
就相当于指针,两个变量指向同一块内存数据,当一个变量对内存区数据改变之后,另一个变量指向的数据当然也会改变。
转载请注明: http://blog.sina.com.cn/s/articlelist_1803561601_0_1. html