不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
一道.NET虚函数笔试题分析
编辑:dnawo 日期:2012-03-20
复制内容到剪贴板
程序代码

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 ");
}
}
}
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 | 引用: 0 | 查看次数: 3070
发表评论
请登录后再发表评论!