new 和 override 的区别

lyq888 2007-05-21 03:00:00
class A
{
public virtual void Test()
{
Console.WriteLine("A");
}
}

class A1 : A
{
public override void Test()
{
Console.WriteLine("A1");
}
}

class A2 : A
{
public new void Test()
{
Console.WriteLine("A2");
}
}

class Test
{
static void Main(string[] args)
{
A a1 = new A1();
A a2 = new A2();

a1.Test();
a2.Test();
(a2 as A2).Test();

Console.Read();
}
}
运行结果是什么?
...全文
327 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
setdefault 2007-05-21
  • 打赏
  • 举报
回复
除非再定义Virtual关键字
setdefault 2007-05-21
  • 打赏
  • 举报
回复
还有一点小差别。
A2作为父类时,Test()就不能再被override了。
dly0411 2007-05-21
  • 打赏
  • 举报
回复
这个问题貌似在csdn里出现过,大约是个面试题!!!!
xxelement 2007-05-21
  • 打赏
  • 举报
回复
呵呵,大家都是专家。
To:lyq888 ()
应该还有个Shadow
ameily_99 2007-05-21
  • 打赏
  • 举报
回复
new 关键子用来屏蔽父类方法;
override 是重写父类的方法,实现多态。
BiBuBiBu 2007-05-21
  • 打赏
  • 举报
回复
楼上正解
lyq888 2007-05-21
  • 打赏
  • 举报
回复
呵呵,谢谢各位
terryghz 2007-05-21
  • 打赏
  • 举报
回复
en
北京的雾霾天 2007-05-21
  • 打赏
  • 举报
回复
对基类的Virtual方法,如果使用New,则只在使用了New这个关键字的类里是"新的",而使用了Override后才会真正的从父类里改变方法的行为.
北京的雾霾天 2007-05-21
  • 打赏
  • 举报
回复

a1.Test(); //输出 A1
a2.Test(); //输出 A
(a2 as A2).Test(); //输出 A2

110,566

社区成员

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

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

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