reference型别由一对handle/object实现,一是我们在程序中操控的“具名(handle)”在受控堆(managed heap)上分配一个不具名的object。
value object内直接包含数据。
讲value型的数据赋值给reference类型的变量,需要进行暗中装箱操作。
1、在受控堆内分配一快空间,准备用来持有value object值。
2、讲value object值复制到箱内
3、将箱子的“managed heap”地址赋予object object。
相反的过程就是拆箱。
向下转型:
string s="cat";
object o=s;
if(o.Length!=3) //发生错误
因为原型别(string)的所有型别信息都遗失了,要是我们想访问string的Length属性,显得把object转为string,而object不会自动转换为另一种型别:
用操作符 is和 as
string str;
if( o is string)
str = (string) o;
string str= o as string
if(str!=null)
{
//ok:o does reference a string
}