值类型与引用类型关系

 引用类型包括:类(class)、接口(interface)、数组(array)、委托(delegate)、object和string。其中草药object和string是两个比较特殊的类型。string类型是一个从object类直接继承的密封类型,不能再被继承,其实例表示Unicode字符串。

可以把值类型与引用类型的值赋给object类型变量,因为object是C#中所有类型(包括所有的值类型与引用类型)根类。C#用“装箱”与“拆箱”来实现值类型与引用类型之间的转换。

装箱 就是装值类型包装成引用类型的处理过程。当一个值类型被要求转换成一个object对象时,装箱操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这相对象实例,最后由object对象引用这个对象实例。

例如:

 

using System;

class Demo

{

        public static void Main()

        {

                int x=123;

                object obj1=x;                   //装箱操作,装值类型x赋给object类型的obj1变量

                x=x+100;                           //改变x的值,此时obj1的值不会随之改变

                Console.WriteLine("x={0}",x);                    //x=223

                Console.WriteLine("object={0}",obj1);       //obj1=123

        }

}

 

 

拆箱操作与装箱操作相反,它是将一个object类型转换成值类型。首先检查由object引用的对象实例类型的包装值,然后包实例中的值拷贝到值类型的变量中。

例如:

 

using System;

class Demo

{

       public static void Main()

        {

              int x=123, y;

              object obj1=x;                  //装箱操作,装值类型x赋给object类型的obj1变量

              x=x+100;                          //改变x的值,此时obj1的值不会随之改变

              y=(int)obj1;                       //拆箱操作,必须进行强制类型转换

              Console.WriteLine("x={0}",x);                    //x=223

              Console.WriteLine("object={0}",obj1);       //obj1=123

        }

}

 

 

注意:当一个装箱操作把值类型转换成一个引用类型时,不需要显式地强制类型转换;而拆箱操作把引用类型转换到值类型时,由于它可以强制转换到任何可以相容的值类型,所以必须显式地强制类型转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值