今天面试遇到一神题,求解释

geek007 2013-10-14 03:34:59
今天面试遇到一神题,求解释
public class A
{
public virtual void Print()
{
Console.WriteLine("A");
}
}

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

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

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

不求甚解,谁能解释下,下面4个方法分别的输出结果,为什么会这么输出
A a = new D();
a.Print();//B

B b = new B();
A a1 = (A)b;
a1.Print();//B

C c = new C();
A a2 = (A)c;
a2.Print();//B

D d = new D();
C c1 = (C)d;
c1.Print();//C
...全文
222 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2013-10-14
  • 打赏
  • 举报
回复
额,这是基本题啊。 自己回去打基础,这玩意弄不明白,谁敢相信你简历上的“精通net,精通面对对象,精通3层” ps:去补看《CLR via C#》 或者《你必须知道的.net》
OSMeteor 2013-10-14
  • 打赏
  • 举报
回复
引用 楼主 geek007 的回复:
今天面试遇到一神题,求解释 public class A { public virtual void Print() { Console.WriteLine("A"); } } public class B : A { public override void Print() { Console.WriteLine("B"); } } public class C : B { public void Print() { Console.WriteLine("C"); } } public class D : C { public new virtual void Print() { Console.WriteLine("D"); } } 不求甚解,谁能解释下,下面4个方法分别的输出结果,为什么会这么输出 A a = new D(); a.Print();//B B b = new B(); A a1 = (A)b; a1.Print();//B C c = new C(); A a2 = (A)c; a2.Print();//B D d = new D(); C c1 = (C)d; c1.Print();//C
多看看书啊
熙风 2013-10-14
  • 打赏
  • 举报
回复
打个断掉一个个调试
uvvvw 2013-10-14
  • 打赏
  • 举报
回复
这个应该算是基础题,不算神题吧。
Regan-lin 2013-10-14
  • 打赏
  • 举报
回复
继承,多态的问题,看了LZ还需加强
cheng2005 2013-10-14
  • 打赏
  • 举报
回复
这里面有三个Print()方法
一个属于A,一个属于C,一个属于D

只要你明白这两句话你就明白这题的意思了。
geek007 2013-10-14
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
不知道有什么好解释的,你要是不懂那就说明你根本就不知道override,virtual,new 这三个关键字的意思。 回去好好翻翻书吧。
学的是不好,看了也不明白,所以才发出来,求解释,当学习。
moonwrite 2013-10-14
  • 打赏
  • 举报
回复
考的知识点是考 多态~ 为什么会这么输出: 明白多态 就应该明白了~
cheng2005 2013-10-14
  • 打赏
  • 举报
回复
不知道有什么好解释的,你要是不懂那就说明你根本就不知道override,virtual,new 这三个关键字的意思。 回去好好翻翻书吧。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧