值类型和引用类型之间转换,在内存中是怎么个情况呢? 是这样吗?值类型转到引用类型,会把栈中的数据拷贝到托管堆中,再构建一个引用对象,引用类型转到值类型,会把托管堆中的对象拷贝到栈中,再销毁引用对象 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 像指针的指针...但不要这么去理解,引用和指针的概念差别还是比较大的...托管对象的引用地址是可变的,GC清理托管堆时很可能移动对象,引用地址会改变,一般看到也没用...所以.NET中一般不关心内存地址... 不要乱扯装拆箱...装拆箱仅指与值类型与object类型及值类型实现的接口类型之间的转换操作...严格不严格地讲,装拆箱都属于类型转换...而自定义的值类型与引用类型转换跟装拆箱扯不上关系... 我只不过引用了下《CLR via C#》里面的内容为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制。下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情: 1. 在托管堆中分配好内存。分配的内存量是值类型的各个字段需要的内存量加上托管堆的所有对象都有的两个额外成员(类型对象指针和同步块索引)需要的内存量。 2. 值类型的字段复制到新分配的堆内存。 3. 返回对象的地址。现在,这个地址是对一个对象的引用,值类型现在是一个引用类型。一个已装箱的值类型实例在拆箱时,内部会发生下面这些事情: 1. 如果包含了“对已装箱值类型实例的引用”的变量为 null,就抛出一个NullReferenceException 异常。 2. 如果引用指向的对象不是所期待的值类型的一个已装箱实例,就抛出一个 InvalidCastException 异常。42 C# winfrom中第三方控件GridContrl如何把数据库中的表竖向显示? 怎么在DataGridView最后一行加上统计 写入到数组 求教c# 引用类型 ==号运算符重载的问题 如何捕捉反射的异常 暑期计划 怎样用类似isnumber的方法,判断一个字符是不是英文字母? 用c#代码有规律生成一万条数据 如何将数据库由Sql企业版转移到个人版中? C#如何在网页上获取我的登录名称? C#,datagrid添加一行
我只不过引用了下《CLR via C#》里面的内容为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制。下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情:
1. 在托管堆中分配好内存。分配的内存量是值类型的各个字段需要的内存量加上托管堆的所有对象
都有的两个额外成员(类型对象指针和同步块索引)需要的内存量。
2. 值类型的字段复制到新分配的堆内存。
3. 返回对象的地址。现在,这个地址是对一个对象的引用,值类型现在是一个引用类型。一个已装箱的值类型实例在拆箱时,内部会发生下面这些事情:
1. 如果包含了“对已装箱值类型实例的引用”的变量为 null,就抛出一个NullReferenceException 异
常。
2. 如果引用指向的对象不是所期待的值类型的一个已装箱实例,就抛出一个 InvalidCastException 异
常。42