C#之虚方法解读
方法声明前带有virtual关键字,那么这个方法就是虚方法,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的特点:1.虚方法不允许有static修饰符2.虚方法不允许有abstract修饰符3.虚方法不允许有override修饰符4.虚方法不能是私有的,不能使用PRivate修饰符一般方法在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的而虚方法在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数eg:Bird a = new Eagle(); 其中Bird是申明类,Eagle是实例类。1.当a调用一个Eagle类的方法时,系统会直接去检查Eagle类,看所调用的方法是否为虚方法;2.如果不是虚方法,那么它就直接执行该方法。而如果是一个虚方法,那么这个时候它就不会立刻执行该方法了,而是开始检查Eagle类。3.在这个Eagle类里,他会检查Eagle类的定义中是否有实现该虚方法或者重新实现该虚方法(通过override关键字)的方法,如果有,它就不会再找了,而是马上执行该Eagle类中实现虚方法的方法。
4.而如果没有的话,系统就会不停地往上找Eagle类的父类,并对父类重复刚才在Eagle类里的检查,直到找到第一个重载了该虚方法的父类为止,然后执行该父类里重载后的方法。
新闻热点
疑难解答