几道这样的题,分别输出什么结果?并且说明理由,为什么会是这样的结果,全面深入的剖析
1.     public class A
    {
        public void F()
        {
            Console.WriteLine("A.F");
            Console.ReadLine();
        }
        public virtual void G()
        {
            Console.WriteLine("A.G");
            Console.ReadLine();
        }
       
    }
    public class B : A
    {
        new public void F()
        {
            Console.WriteLine("B.F");
            Console.ReadLine();
        }
        public override void G()
        {
            Console.WriteLine("B.G");
            Console.ReadLine();
        }
       
    }
 static void Main(string[] args)
        {
            B b = new B();
            A a = b;
            a.F();
            b.F();
            a.G();
            b.G();
}
第二题: public class A
    {
        public virtual void F()
        {
            Console.WriteLine("A.F");
            Console.ReadLine();
        }
    }
    public class B : A
    {
        public override void F()
        {
            Console.WriteLine("B.F");
            Console.ReadLine();
        }
    }
    public class C : B
    {
        new public virtual void F()
        {
            Console.WriteLine("C.F");
            Console.ReadLine();
        }
    }    public class D : C
    {
        public override void F()
        {
            Console.WriteLine("D.F");
            Console.ReadLine();
        }
    }static void Main(string[] args)
        {
            D d = new D();
            A a = d;
            B b = d;
            C c = d;
            a.F();
            b.F();
            c.F();
            d.F();
}
还有一些更复杂的,涉及到接口的了,把一个对象强转为接口类行等等,郁闷了

解决方案 »

  1.   


     static void Main(string[] args)
            {
                B b = new B();
                A a = b;
                a.F();
                b.F();
                a.G();
                b.G();
    }
     
    这么跟你说吧,一切都以new 为中心。
    A a=b,的啊,这个只是b被加了一层皮而已
      

  2.   


    new 是表示实例化一个对象,而且内存会分配内存给对象
    其他的东西都是引用该内存对象
      

  3.   

    感觉像是对virtual,override使用问题,lz可以看下virtual,override的使用
      

  4.   

    1.方法定义了virtual,用的时候和正常方法一样,子类继承,没有重写的话,也和平常方法一样
    2.子类继承重写之后,如果没用调用base.XXX()就完全按重写后内容
    3.子类重写并且调用了base.XXX()就会在相应地方掉父类方法
      

  5.   

     new功能之一:  使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
      

  6.   

    D继承了A,B,C,但A中的方法在C中new了一次,那么c.F()会输出什么?为什么?