procedure AddRecord; virtual;谁能帮我解释下virtual在这里意味着什么?
解决方案 »
- D7 如果设置EDIT或maskedit ,使输入数字进能变成千分位格式
- Delphi2007中ActiveForm在哪里?谢谢
- 郁闷很久啦,各位高手帮帮忙。系统模块化,在释放接口时出现异常,帮帮忙啊。
- IndyTCPServer问题
- 请教一个最最简单的ole参数传递问题..
- 谁有用indyDemo中的MailClient成功发送过邮件?
- 请问delphi6有没有自带托盘控件的??还是自己去下的?
- 数据库高手看过来!(高分相送)
- 急、急、急
- 线程操作IMAGE问题。
- bmp.scanline和getpixel获取的颜色为什么会不同呢?
- DBGrid中如何添加ComboboX,并将此作为查询条件!
具体的参见
http://www.knowsky.com/335395.html
也就是说该函数在声明时应该包含这两个指示字中的一个,比如:procedure AddRecord; virtual;在需要覆盖的时候,只需要在子类中用override 指示字重新声明一下就可以了。procedure AddRecord; override;
关于方法定义关键字的说明:如果在过程定义声明时包括了的关键字的含义:
static 表示是静态方法;静态方法是方法的缺省类型,不能被覆盖;
virtual 表示是虚拟方法;
dynamic 表示是动态方法;
这两类方法的共同点是都可以被覆盖(override),区别仅在于运行时调用方法时的派发机
制,virtual方法为执行速度做了优化,而dynamic方法则为代码大小做了优化;经常被覆盖的
方法应该定义为virtual方法;
message 表示是消息处理方法;在关键字message后面的值指明了这个方法要响应的消息;
用消息处理方法来响应Windows的消息,这样就不用直接来调用它;
override 表示是覆盖方法;要求祖先类中必须有该方法的定义,并且参数的顺序和类型
及返值的类型必须匹配;用于扩展祖先类中的该方法而不是取代它(如不调用祖先类中的该方
法则等同于取代);
overload 表示是重载方法;用于一个类中有许多同名的方法带着不同的参数表的情形;
(属性的读写方法不能被重载);
abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即
在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中;如
procedure DoSomething; virtual; abstract;
reintroduce表示是重新声明的方法;用于方法的名称与祖先类中的某个方法名称相同的情形;virtual 和 dynamic定义的虚函数,都是为了子类override用的,只不过它们的实现不一样。vitrual 占用的空间大点,但速度快些。dynamci正好相反.
虚方法可以说为多态而生。虚方法(virtual method)与动态方法(dynamic)的区别在于,virtual方法的代码在每个子类中都存在,无论是否被override;而dynamic调用时,如果派生类没有提供覆盖,则需要一路向上找到定义了该方法的父辈类上去,速度自然慢点。
这就是楼上说的,时间还是空间的衡量问题。动态方法在vcl源码中大量运用,保证了vcl生成代码的量不至过大。
这不需要我们特意去标记,因此你就可以认为它不存在
但在深入研究时,我们还是要知道的