一个很基础的问题,大家说说看法

周公
博客专家认证
2006-10-31 10:11:11
using System;

namespace VirtualDemo
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Son son=new Son();
Father father=son;
father.MyFun();
son.MyFun();
father.MyGun();
son.MyGun();
Console.ReadLine();
}
}

public class Father
{
public void MyFun()
{
Console.WriteLine("Father.MyFun()");
}

public virtual void MyGun()
{
Console.WriteLine("Father.MyGun()");
}
}

public class Son:Father
{
public new void MyFun()
{
Console.WriteLine("Son.MyFun()");
}

public override void MyGun()
{
Console.WriteLine("Son.MyGun()");
}

}
}

大家看看最后是什么结果,说说你的理由。
...全文
155 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
viena 2006-10-31
  • 打赏
  • 举报
回复
如果方法是被隐藏的,只是派生类中被隐藏
基类中的方法仍然存在~
viena 2006-10-31
  • 打赏
  • 举报
回复
方法只与类型有关,与实例无关(override产生的多态性除外)
周公 2006-10-31
  • 打赏
  • 举报
回复
new 显式隐藏从基类继承的方法
就是说当时在son的实例有两个名为MyFun()的方法!

--------------------------
这一点我也知道,我就是想不清楚,为什么只有一个Son的实例的时候,father.MyFun()会执行father的方法而不是son的MyFun()方法。
hatita 2006-10-31
  • 打赏
  • 举报
回复
new 显式隐藏从基类继承的方法
就是说当时在son的实例有两个名为MyFun()的方法!
周公 2006-10-31
  • 打赏
  • 举报
回复
我不明白的是第1,既然内存里只有son的实例,father.MyFun()应该是执行son的MyFun()方法才对呀,可是这里执行的father的,不理解。
wheeler 2006-10-31
  • 打赏
  • 举报
回复
这是面向对象的多态性~~~
GXY2005 2006-10-31
  • 打赏
  • 举报
回复
这是面向对象的多态性
viena 2006-10-31
  • 打赏
  • 举报
回复
这是面向对象的多态性~
nicochang 2006-10-31
  • 打赏
  • 举报
回复
Father father=son;这里并没有为father构造一个实例,内存里只有一个实例,就是son的实例。
灰太狼 2006-10-31
  • 打赏
  • 举报
回复
Father.MyFun()
Son.MyFun()
Son.MyGun()
Son.MyGun()
1.2.4就不用說了吧,我想你應該是不明白第三個。其實也很簡單,son重寫了father中的myGun(),所以當用father.mygun()時,就自己引到son.mygun()去了。new和override的不同之處就在這裡。
股神 2006-10-31
  • 打赏
  • 举报
回复
up
相关推荐
发帖
C#

10.9w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-31 10:11
社区公告

让您成为最强悍的C#开发者