c# 虚函数继承的问题!

classProgram{staticvoidMain(string[]args){Ab=newB();b.dail();Console.Read();}}publicc... class Program
{
static void Main(string[] args)
{
A b = new B();
b.dail();
Console.Read();
}
}
public class A
{
public void dail()
{
ShowMSG();
}
public virtual void ShowMSG()
{
Console.WriteLine("A");
}
}
public class B : A
{
public override void ShowMSG()
{
Console.WriteLine("B");
}
}
现在main方法中是
A b = new B();
b.dail();
结果是打印出了B
如果是
A b = new A();
b.dail();
则打印A
如果是
B b = new B();
b.dail();
则打印B
请帮我解释下,虚方法何时调用基类的,何时调用派生类的!糊涂了!
展开
 我来答
rxj_2008
2012-09-02 · TA获得超过463个赞
知道小有建树答主
回答量:218
采纳率:100%
帮助的人:182万
展开全部
派生类方法调用的时候,会先检查自身是否有该方法,如果有就调用自身的,如果没有检查父类是否有该方法,如果有,就调用父类的,如果没有就再往上检查父类的父类,指导检查到object这个基类为止。
A b = new B();
b.dail();
这个就是,执行b.dail()时,因为是new B(),就先检查B里是否有dail()方法,B里重写了dail()方法,所以就执行B里的dail方法,后面两个解释也类似。希望对你有帮助。
追问
按照你的解释,b.dail()方法在B中没有,于是调用父类的dail()方法,父类的dail()方法中调用ShowMSG()方法,那么这个ShowMSG()方法为什么不是父类中的ShowMSG()方法,而是B中的ShowMSG()方法呢!
匿名用户
2012-09-10
展开全部
这个可简单,但是很重要。首先要知道子类继承父类,实例化时先实例化父类然后再实例化子类。
A b = new B();
b.dail();

说明先实例化类A,再实例化类B,B的方法覆盖了A的方法,结果是打印出了B。
A b = new A();
b.dail();

只实例化A,所以打印A的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式