现在的位置: 首页 > 综合 > 正文

把new、virtual、override说透

2013年08月25日 ⁄ 综合 ⁄ 共 1791字 ⁄ 字号 评论关闭
 

我们先看下面一段程序:

  1.     /// <summary>
  2.     /// 父类
  3.     /// 作者:周公
  4.     /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
  5.     /// 日期:2008-09-01
  6.     /// </summary>
  7.     public class Father
  8.     {
  9.         public void Run0()
  10.         {
  11.             Console.WriteLine("Father.Run0");
  12.         }
  13.      }
  14.     /// <summary>
  15.     /// 子类
  16.     /// 作者:周公
  17.     /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
  18.     /// 日期:2008-09-01
  19.     /// </summary>
  20.     public class Son:Father
  21.     {
  22.         public void Run0()
  23.         {
  24.             Console.WriteLine("Son.Run0");
  25.         }
  26.     }
  27.    class Program
  28.     {
  29.         static void Main(string[] args)
  30.         {
  31.             Father[] fatherList = new Father[2];
  32.             fatherList[0] = new Father();
  33.             fatherList[1] = new Son();
  34.             fatherList[0].Run0();
  35.             fatherList[1].Run0();
  36.         }
  37.     }

 

程序的运行结果是:
    Father.Run0

Father.Run0

 

稍微细心的朋友可能发现在Son类的Run0方法下面有一段棕色的波浪线,当我们把鼠标放到该下划线上时,会看到下面的提示编译程序时在程序的“输出”窗口也能看到这个警告

“MethodDemo.Son.Run0()”隐藏了继承的成员“MethodDemo.Father.Run0()”。如果是有意隐藏,请使用关键字new。

如图:

 

然后我们再来第二个版本的Run方法,我们称之为Run1(),,与第一个版本的区别是在子类的同名同参(方法名相同,参数个数和参数顺序相同,下同)方法前面加上了一个new关键字,代码如下:

  1.     /// <summary>

  2.     /// 父类
  3.     /// 作者:周公
  4.     /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
  5.     /// 日期:2008-09-01    
  6.     /// </summary>
  7.     public class Father
  8.     {
  9.         public void Run1()
  10.         {
  11.             Console.WriteLine("Father.Run1");
  12.         }
  13.      }
  14.     /// <summary>
  15.     /// 子类
  16.     /// 作者:周公
  17.     /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx
  18.     /// 日期:2008-09-01
  19.     /// </summary>
  20.     public class Son:Father
  21.     {
  22.         public new void Run1()
  23.         {
  24.             Console.WriteLine("Son.Run1");
  25.         }
  26.     }
  27.     class Program
  28.     {
  29.         static void Main(string[] args)
  30.         {
  31.             Father[] fatherList = new Father[2];

抱歉!评论已关闭.