20130409和陈讨论面试题

   public abstract class A          

         {                 

                public A()

                  {                   Console.WriteLine('A');

                  }

                  public virtual void Fun()

                  {

                  Console.WriteLine("A.Fun()");

                  }

                  }

                  public class B: A

                  {

                  public B()

                  {

                  Console.WriteLine('B');

                  }

                  public new void Fun()

                  {

                  Console.WriteLine("B.Fun()");

                  }

                  public static void Main()

                  {

                  A a = new B();

                  a.Fun();

                  }

                  }

输出a b a.fun()因为在B中public new void Fun(),“new”中表示方法重写,这在父类和子类方法名相同时表示为子类特有的方法

 

  200 100 100,装箱是,把a的值复制了一份,装起来,让ob指向。就是说此时ob指向的内容与之前的a没关系了,因为此时内存有2份。。。 a=200这句 没有拆箱
因为a还是int,200也是int , int c=(int)ob;这个才是拆箱 因为ob是引用类型,c是int类型 拆箱与装箱一定是引用类型与值类型之间变化  装箱: 对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。按三步进行。 第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex)。 第二步:将值类型的实例字段拷贝到新分配的内存中。 第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。

 

posted @ 2013-04-09 11:27  xjt360  阅读(109)  评论(0编辑  收藏  举报