CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

【求助】一个关于new和override的问题,请赐教,谢谢!

楼主renchao(阿超)2005-11-02 01:49:19 在 .NET技术 / C# 提问

class   A    
  {    
  public   virtual   void   F()    
  {    
  Console.WriteLine("A");    
  }    
  }    
   
  class   B   :   A    
  {    
  public   override   void   F()    
  {    
  Console.WriteLine("B");    
  }    
  }    
   
   
  class   C   :   B    
  {    
  (1)   public   override   void   F()   {   Console.WriteLine("C");   }  
  (2)   public   new   void   F()   {   Console.WriteLine("C");   }  
  }    
   
  class   Tester  
  {  
  static   void   Main()  
  {  
  A   a   =   new   C();    
  a.F();    
  }  
  }  
          在class   C中,如果用(1),结果就是“C”;如果用(2),结果就是“B”,为什么啊?  
  请问new和override到底什么区别啊,没搞定,请赐教,谢谢! 问题点数:10、回复次数:4Top

1 楼saucer(思归)回复于 2005-11-02 02:06:38 得分 10

这么说吧,virtual/override还是在同一个上下结构的,系统会根据当前的类型找到对应的方法,正宗的多态形式,而new则就是另开山头,独立门户了,重新开始一个上下结构  
   
  class   C   :   B    
  {    
  (1)   public   override   void   F()   {   Console.WriteLine("C");   }  
  (2)   public   new   void   F()   {   Console.WriteLine("C");   }  
  }    
   
  class   C   :   B    
  {    
    public   override   void   F()   {   Console.WriteLine("C");   }  
  }    
   
  A   a   =   new   C();    
  a.F();    
   
  还是原来的上下结构,因为a的类型是C,最终调用的是C的方法  
   
  class   C   :   B    
  {    
        public   new   void   F()   {   Console.WriteLine("C");   }  
  }    
   
  A   a   =   new   C();    
  a.F();    
   
  C说我要独立门户,这个新的F跟基类的F无关,因为变量类型是基类A,你调用F(),它在自己的继承类找同一上下结构的方法F,最终找到B的Top

2 楼renchao(阿超)回复于 2005-11-02 02:16:58 得分 0

老大,每天这个时候你都在,真是太好了:)  
   
  那按你的说法,我如何调用class   C中new出来的这个F()呢?  
   
  还有,想请教的是,那你的说法,这样设计出new和ovwerride,有什么优越性吗?  
  能否再拓开谈谈它们之间的关系?  
   
  谢谢!Top

3 楼saucer(思归)回复于 2005-11-02 03:29:38 得分 0

>>>那按你的说法,我如何调用class   C中new出来的这个F()呢?  
   
  you   cannot   call   it   from   a   variable   of   type   A,   you   need   to   call   it   from   a   variable   of   type   C  
   
  >>>这样设计出new和ovwerride,有什么优越性吗?能否再拓开谈谈它们之间的关系?  
   
  it   depends   on   how   you   design   your   class   hierarchy,   C#   just   provides   the   flexibility  
  Top

4 楼renchao(阿超)回复于 2005-11-02 03:51:05 得分 0

明白了,谢谢!Top

相关问题

  • new和override的区别?
  • Overload和Override的区别
  • 疑惑: 关于override 和 base!
  • 关于override的问题,请指教!
  • 请教一下,abstract,override的问题.
  • 关于overload和override方法的问题?
  • 关于override 和 static 的一个问题??
  • 关于new 和 override的区别!
  • 请大大侠详细解释一下override和overload的概念,以及多态的概念
  • 请问如何用override重写form窗体的Show()??

关键词

  • 结构
  • 谢谢
  • 调用
  • override
  • writeline
  • 上下结构
  • console
  • 说法
  • 类型
  • 方法

得分解答快速导航

  • 帖主:renchao
  • saucer

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo