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 : A
14     {
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 : B
26     {
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"

 

  

posted @ 2014-11-29 21:38  李子康  阅读(282)  评论(0编辑  收藏  举报