回 帖 发 新 帖 刷新版面

主题:[讨论]请教一个问题,希望高手指点

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class C1
    {
       public virtual string show()
        {
            return "C1";
        }
    }
    class C2 : C1
    {
        public new string show()
        {
            return "c2";
        }
    }
    class C3 : C1
    {
        public override string show()
        {
           return "c3";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            C1[] obj = new C1[2];
            obj[0] = new C2();
            obj[1] = new C3();
            Console.WriteLine(obj[0].show());
            Console.WriteLine(obj[1].show());
        }
    }
}

结果是 C1
       C3
请问为什么第一个输出的是C1,如果用new的话,不是把基类的show函数隐藏了吗?
它与重写虚函数有什么不同?
希望高手指点,谢谢!

回复列表 (共1个回复)

沙发

new是重建虚函数队列,相当于切断上下关系
而virtual,override是保持上下关系队列
具体可以参考FAQ中的虚函数内容

我来回复

您尚未登录,请登录后再回复。点此登录或注册