快速业务通道

把new、virtual、override说透 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
下:

/// <summary>    /// 父类 /// 作者:周公 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx /// 日期:2008-09-01    /// </summary>    public class Father    {      public virtual void Run2()      {        Console.WriteLine("Father.Run2");      }    }    /// <summary> /// 子类 /// 作者:周公 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx /// 日期:2008-09-01    /// </summary>    public class Son:Father    {      public void Run2()      {        Console.WriteLine("Son.Run2");      } } class Program    {      static void Main(string[] args)      {      Father[] fatherList = new Father[2];        fatherList[0] = new Father();        fatherList[1] = new Son();        fatherList[0].Run2();        fatherList[1].Run2();    } }

我们看看程序的运行效果:

Father.Run2 Father.Run2

程序运行效果与第一个仍然没有什么区别,不过这次子类(Son)的Run2()方法又出现了与Run方法的第一个版本(Run0())一样的警告:“MethodDemo.Son.Run2()”将隐藏继承的成员“MethodDemo.Father.Run2()”。若要使当前成员重写该实现,请添加关键字override。否则,添加关键字new。

我们再写第四个版本的Run方法,我们称之为Run3(),这次父类中Run3()的修饰符与第三个版本相比没有变化(依然是virtual,虚方法),而子类Son中的Run3()方法与第三个版本相比多了一个override修饰符(这次我们熟悉的那个棕色的波浪线警告没有了)。代码如下:

/// <summary>    /// 父类 /// 作者:周公 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx /// 日期:2008-09-01    /// </summary>    public class Father    {      public virtual void Run3()      {        Console.WriteLine("Father.Run3");      }    }    /// <summary> /// 子类 /// 作者:周公 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/09/02/2864429.aspx /// 日期:2008-09-01    /// </summary>    public class Son:Father    {      public override void Run3()      {        Console.WriteLine("Son.Run3");      } } class Program    {      static void Main(string[] args)      {      Father[] fatherList = new Father[2];        fatherList[0] = new Father();        fatherList[1] = new Son();        fatherList[0].Run3();        fatherList[1].Run3();    } }

把new、virtual、override说透(4)

时间:2011-02-07 csdn博客 周公

程序的运行结果如下:

Father.Run3 Son.Run3

这次我们发现程序的运行结果与前面三次不一样了,这次尽管我们声明的对象类型都是Father类(Father数组装的自然都是Father类型的引用),但是因为实例化数组中第二个元素的时候调用了Son类的构造函数,也就是实例化了一个Father类的子类(我们知道子类可以当作父类来看待,他们之间是is a的关系,反之则不行),也就是说fatherList数组中的第二个元素的引用类型是Father类型,但它的实例类型确实Son类型。而在运行的时候,并不是根据我们的引用类型(引用类型是Father类型的)去调用该引用类

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号