日期:2014-05-17  浏览次数:20757 次

请教.net方面的两个问题
最近读了《CLR VIA C#》,有两个问题不太明白,查了网络仍不理解,所以向大伙请教一下。

问题1:

C# code

        static void Main(string[] args)
        {
            object o;
            int i = 2;
            o = i;
            Console.WriteLine(o.GetType().ToString());
        }


上面是一个封箱操作,这时应该是在堆中创建一个对象(Object),然后把i的内容复制进去。
这时 o指向的应该是一个Object呀,为何输出结果确是 System.Int32

问题2:
按照书中说明,值类型是没有 “对象类型指针”及“同步块索引”这两个成员的。
那么 Struct(也是值类型),中的 方法,是存放在哪里的?

谢谢!

------解决方案--------------------
我的理解不知道对不对 期待跟多大牛的解释

1.object o;创建一个object的引用没有指向任何值
2.int i = 2;在栈内存中分配一个值引用的内存空间 并赋值为2
3.o = i;将o指向i的内存空间因为o是一个引用 所以现在实际上对o的操作和对i的操作没有任何区别
所以 Console.WriteLine(o.GetType().ToString());结果就是int的喽


也不知道对不对
------解决方案--------------------
说白了,就是父类引用指向子类对象。调用GetType的时候获取的是所指向对象的类型。
------解决方案--------------------
探讨

to:haukwong
封箱与继承不一样吧?