虚函数

Class Base

          void say();

 

Class Sub : Base

         void say()

 

Base b = new Sub();

b.say();//此时调的是哪个类的say方法?

           

 

在类的定义中,申明时定义的类叫申明类,执行实例化时候定义的类叫实例类。例如:

                                    Base1 base1 = new Derived1 ();其中Base1叫做申明类,而Derived1则是实例类。

  此时编译器具体的检查的流程如下

1、当调用函数时,系统会直接去检查申明类,看所调用的函数是否为虚函数;

2、如果不是,那么它就直接执行该函数。如果是virtual函数,则转去检查对象的实例类。

3.在实例类中,若有override的函数,则执行该函数,如果没有,则依次上溯,按照同样步骤对父类进行检查,知道找到第一个override了此函数的父类,然后执行该父类中的函数。(星梦《C#虚函数virtual详解收藏》)

 

http://blog.csdn.net/zhuzhu837_1/article/details/7753938

posted on 2017-11-28 14:37  jiahuafu  阅读(256)  评论(0编辑  收藏  举报

导航