分享

C#关于虚方法和重写的实例说明(virtual 和override)

 昵称10504424 2013-02-20
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace ConsoleAppsTest  
  7. {  
  8.     class Program  
  9.     {  
  10.         static void Main(string[] args)  
  11.         {  
  12.             D d = new D();  
  13.             A a = d;  
  14.             B b = d;  
  15.             C c = d;  
  16.             a.F();  
  17.             b.F();  
  18.             c.F();  
  19.             d.F();  
  20.             a.F1();  
  21.             a.F2();  
  22.             c.F1();  
  23.             c.F2();  
  24.             Console.ReadKey();  
  25.         }  
  26.     }  
  27.   
  28.     public class A  
  29.     {  
  30.         public virtual void F()  
  31.         {  
  32.             Console.WriteLine("A.F");  
  33.         }  
  34.         public void F1()  
  35.         {  
  36.             Console.WriteLine("A.F1");  
  37.         }  
  38.         public virtual void F2()  
  39.         {  
  40.             Console.WriteLine("A.F2");  
  41.         }  
  42.     }  
  43.     public class B : A  
  44.     {  
  45.         public override void F()  
  46.         {  
  47.             Console.WriteLine("B.F");  
  48.         }  
  49.     }  
  50.     public class C : B  
  51.     {  
  52.         new public virtual void F()  
  53.         {  
  54.             Console.WriteLine("C.F");  
  55.         }  
  56.         new public  void F1()  
  57.         {  
  58.             Console.WriteLine("C.F1");  
  59.         }  
  60.     }  
  61.     public class D : C  
  62.     {  
  63.         public override void F()  
  64.         {  
  65.             Console.WriteLine("D.F");  
  66.         }  
  67.     }  
  68. }  

执行结果如下:


说明:

就 类A 来说,其他类同:

A 是a 的声明类;D是实例类

在调用实例a的方法时,首先是在声明类A中找此方法,如果有此方法并且是非虚方法,就直接执行该方法;如果有此方法并且是虚方法,就在A的子类中找,如果在子类B中找到该方法的重写,就执行B中的重写方法;如果没有找到B中对该方法的重写,就执行A类的虚方法。注意:如果A a =new A();调用a的方法时,都执行A类自己的方法。

如果有子类new 一个方法时,就表示覆盖了基类的该方法,调用时就执行自己的new方法;

如果子类中没有该方法,调用基类的方法时,执行基类的方法。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多