书上说:装箱和拆箱是对值类型和引用类型之间的互操作,自从有了泛型,这个开销较大的事情尽量少做。
问题是:自定义了一个类MyClass, 然后自己实例化为MyClassInstance, Object container = MyClassInstance;这个操作是装箱么? 如果是,如何解释“值类型和引用类型的互操作”,两个不都是引用类型么?
问题是:自定义了一个类MyClass, 然后自己实例化为MyClassInstance, Object container = MyClassInstance;这个操作是装箱么? 如果是,如何解释“值类型和引用类型的互操作”,两个不都是引用类型么?
解决方案 »
- 请教:跳转到新页面并显示多项查询结果的部分代码~~~~~~~~~~~~~~
- imagelist图片失真
- 网络访问时如何弹出用户登陆框
- DATAGRIDVIEW中选中其他行时,TEXTBOX中内容如何才能变化呢?
- System.Data.OleDb.OleDbException: 'c:\windows\system32
- window.showModalDialog回传参数问题
- 高人指点,为什么数据库中查询的结果和在程序中监视的时候 结果不一样???????????????????????????
- 请问如何在一个事件里取消另一个事件的触发
- 如何取得XML中属性对应的未定义的编号ID,如
- C#读取excel显示到dataGridView中,不允许修改,然后保存到SQL SERVER中,如何实现?
- 编写闹钟程序,是使用一个线程轮询所有的提醒时间,还是每个提醒时间使用一个线程好?
- 父窗体传值给子窗体的问题,急死人啊.
值类型实例分配在堆栈上,它的变量本身就包含了实例数据,而引用类型分配在托管堆上,里面包含的是实例数据
的内存引用。一个包含的是值本身,一个是包含的是值的引用。他们之间的转换才叫装箱和拆箱。
值类型和引用类型都是从object继承而来。
你举的这个例子没有发生上述行为。
特殊情况下会有出入,比如说当一个类里面定义了值类型。
unbox:引用类型到值类型。box:object a = 123;unbox:int i = (int)a;通过泛型可以指定容器元素类型,因此可以减少这方面的性能损耗。
如果是ArrayList之类的容器值类型只能转换成引用类型。
如果是在這種情況下:
自定義1个MyClass类然后
MyClass class = new MyClass();ArrayList al = new ArrayList();
List<MyClass> list = new List<MyClass>();那把一堆MyClass的实例放到al和list里面, 在性能方面是不是一样呢
基类Object container = 子类MyClass的实例Instance
将子类的instance装入Object,就是小装大,两个都是引用类型,这样的行为可以叫做“装箱”么? 大家不用再讨论 堆栈和堆的关系。