装箱和拆箱 (判断两个类型转换是否构成装箱或拆箱,要看它们是否存在继承关系)

<>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace 装箱和拆箱
{
    //在做开发的时候要尽量避免装箱和拆箱。
    class Program
    {
        //判断一个类型转换是否构成了装箱或者拆箱。有个前提就是:这两个类型是否存在继承的关系。如果存在继承关系则有可能发生装箱或者拆箱。如果不存在继承关系,他们一定不会发生装箱或者拆箱。
        static void Main(string[] args)
        {
            int x = 5;
            object o = x; //将值类型转换成引用类型,这是装箱
            int y = (int)o; //将引用类型转换成值类型,这是拆箱

            ArrayList list = new ArrayList();
            for (int i = 0; i < 10000; i++)
            {
                //Add(object value) 注意:Add这个方法的参数接收的是一个object类型的数据,根据里氏转换定律。一个地方需要一个父类,那么可以将一个子类给它。因为子类可以隐式的转换成父类。
                list.Add(i); //这是一个装箱过程。将一个值类型的i 转换成object类型存放到了list这个泛型集合中了。因为i的值是小于10000的。那么这里将i从0开始到9999 总共将10000个数字存放到了list中。也就意味着 做了10000次的装箱。极大的影响了系统的性能。
            }



            //--------以下这种情况不构成拆箱操作。因为string 与int类型不构成继承关系。

            string str = "123";
            int a = Convert.ToInt32(str); //将一个引用类型强制转换成一个值类型。



            //---------以下情况构成了装箱操作。

            int b = 10;
            IComparable ii = b; //IComparable是一个接口,接口是一个引用类型。而int类型是继承了IComparable接口的。所以将一个值类型的b转换成一个引用类型 ii 那么就构成了装箱了。

        }
    }
}


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值