日期:2014-05-18  浏览次数:20831 次

对象
C# code

class A
    {
        public void F() { Console.WriteLine("A.F"); }
        public virtual void G() { Console.WriteLine("A.G"); }
    }
    class B : A
    {
        new public void F() { Console.WriteLine("B.F"); }
        public override void G() { Console.WriteLine("B.G"); }
    }
    class virtualMethod
    {
        internal static void main()
        {
            B b = new B();
            A a = b;//什么意思?对象a就是对象b了吗?
            a.F();//为什么要输出A.F,它不是相当于b.F()吗
            b.F();
            a.G();//a到底是A的对象还是B的对象?
            b.G();
        }
    } 


产生的输出:
A.F 
B.F 
B.G 
B.G

------解决方案--------------------
C# code

class virtualMethod
    {
        internal static void main()
        {
            B b = new B();
            //这儿仅仅是将b的引用复制给a,a和b这时候指向内存中同一个地址。
            A a = b;//什么意思?对象a就是对象b了吗?
            //b中的F()使用了new关键字,相当于b有二个F()方法。
            a.F();//为什么要输出A.F,它不是相当于b.F()吗
            b.F();
           //a在内存中的方法表是A的不是b的。
            a.G();//a到底是A的对象还是B的对象?
            b.G();
        }
    }

------解决方案--------------------
a和b指向同一个对象,a可用,b亦可用
------解决方案--------------------
1楼写的很详细了
------解决方案--------------------
这段代码主要让你理解什么是虚方法