■◆这个override和new的题目,哪位高手解释下啊,我看不懂

[复制链接]
查看11 | 回复2 | 2011-3-25 02:42:04 | 显示全部楼层 |阅读模式
using System;
class A
{

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

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

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

public override void F(){Console.WriteLine(\"D.F\");}
}
class Test
{

public static void Main()
{

D d=new D();

A a=d;

B b=d;

C c=d;

a.F();

b.F();

c.F();

d.F();

Console.ReadLine();
}
}




运行结果:
B.F
B.F
D.F
D.F


哪位高手解释下啊,我看不懂
回复

使用道具 举报

千问 | 2011-3-25 02:42:04 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。

同时出现B.F D.F并不是override重写后就不会执行以前的那个方法,不信你改成
C c= new c();
结果是B.F
B.F C.FD.F
问题出在实例化得时候
其实本质上应该是这样的
CLASSA a=NEW CLASSD(),这个叫动态绑定

比如说 CLASS A 是一个基类,而 CLASS D 继承自
CLASSA.像这样来创建类的实例称为动态绑定

动态绑定的优点就是:当在子类中存在和父类同名的方法时,能自主判定是
该调用父类的同名方法还是子类的该同名方法子类中存在父类的同名方法时,称
为方法重写
回复

使用道具 举报

千问 | 2011-3-25 02:42:04 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-872693\">我对你无语 真是无语 我是说要解释题目的答案
我晕你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行