木子屋 Dnawo's BLOG

一道.NET虚函数笔试题分析

👤 dnawo 📅 2012-03-20 👁 3727 👍 0 💬 0 🔄 本站原创
using System;

namespace ConsoleApplication1
{
    class Program
    {
        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();

            Console.ReadKey();
        }

    }

    class A
    {
        public virtual void F()
        {
            Console.WriteLine("A.F ");
        }
    }

    class B : A
    {
        public override void F()
        {
            Console.WriteLine("B.F ");
        }
    }

    class C : B
    {
        public virtual void F()
        {
            Console.WriteLine("C.F ");
        }
    }

    class D : C
    {
        public override void F()
        {
            Console.WriteLine("D.F ");
        }
    }
}

1.代码分析

C.F()省略了new关键字,C.F()隐藏了B.F(),而D.F()重写了C.F()。

2.结果分析

①.调用a.F(),发现A.F()是一个虚函数,查找发现D.F()不是它的重写,向上找C.F()也不是,直到B.F()才是,输出B.F;
②.调用b.F(),直接输出B.F;
③.调用c.F(),发现C.F()是一个虚函数,查找发现D.F()是它的重写,输出D.F;
④.调用d.F(),直接输出D.F;

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 程序员职业规划发展路线图 下一篇 → 我是工程师,不是编译器