首页 > 代码库 > C# 虚方法

C# 虚方法

当方法被定义为virtual时,表明方法为虚方法。

虚方法的作用:提供子类重写(override)父类方法的权利。(java中所有方法默认为虚方法)

一个子类如果想改变父类中的非虚方法功能,可以使用new关键字隐藏父类方法。

声明类与实例类不同时(声明类是实例类父类)。

首先在声明类中查找当前方法,如果没找到,再到声明类的父类中去找直到找到为止。

找到后检查该方法是否为虚方法,如果为非虚方法立即调用。如果为虚方法,从实例类中开始找,找不到再在其父类中找,直到找到为止,找到后立即执行。

例: 

 1     public class A 2     { 3         public string GetUnvirtual() 4         { 5             return "A.Unvirtual"; 6         } 7         public virtual string GetVirtual() 8         { 9             return "A.Virtual";10         }11     }12 13     public class B : A14     {15         new public string GetUnvirtual()16         {17             return "B.Unvirtual";18         }19         public override string GetVirtual()20         {21             return "B.Virtual";22         }23     }24 25     public class C : B26     {27         new public string GetUnvirtual()28         {29             return "C.Unvirtual";30         }31         public override string GetVirtual()32         {33             //return base.GetVirtual();34             return "C.Virtual";35         }36     }
View Code

C c = new C();

A a = c;

a.GetUnvirtual(); 返回 "A.Unvirtual"

a.Getvirtual(); 返回 "C.Virtual"

 

  

C# 虚方法