readonly和虚方法
readonly修饰的字段只能在构造函数或变量初始化时赋值。
成员字段和静态方法都不能声明为virtual,因为这个概念只对类中的实例成员有意义。子类中重写虚方法用override关键字。
只有虚方法和抽象方法才能被重写。
虚方法与一般方法的区别:一般方法在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间不发生变化:而虚方法在编译期间不能被静态编译,它的相对地址是不确定的,会根据运行时期的对象实例来动态判断要调用的方法。
虚方法的具体执行过程如下:
(1):当调用一个对象的方法时,系统会直接检查这个对象声明定义的类(即声明类,在下例中,对于对象A,BaseClass就是声明类),确定所用方法是否为虚方法。
(2):如果不是虚方法,那么它就直接执行该方法。而如果该方法有virtual关键字修饰,也就是说该方法是一个虚方法,那么此时它就不会立即执行该函数了,而是转去检查对象的实例类(即执行实例化的类,在下例中,对于对象A,DerivedClass类是实现类)。当然,这里如果对象实现是同一类,则就会直接执行该方法(在下例中,对于对象B,声明类和实现类都是DerivedClass);如果对象类和实现类不一致,即实现类是声明类的派生类,则接着向下执行。
(3):系统会检查该实例类的定义中是否有重新实现该虚方法(通过override关键字),如果有,则系统不会再查找,而马上执行该实例类中的重新实现的方法;如果没有,则系统仍然执行声明类中的该方法。
例:
DerivedClass B=new DerivedClass();
B.DoWork();
BaseClass A=new BaseClass();
A.DoWork();

浙公网安备 33010602011771号