关键字“动态”对程序有什么作用?

时间:2016-01-09 15:43:32

标签: delphi

使用关键字dynamic声明过程会发生什么?

使用关键字static声明它会产生什么影响?

1 个答案:

答案 0 :(得分:8)

通过阅读documentation可以回答这个问题。

dynamic关键字引入了一种可以多态覆盖的方法。在语义上它可以与virtual互换,但是以不同的方式实现。在此处阅读:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Methods#Virtual_and_Dynamic_Methods

  

要使方法成为虚拟或动态方法,请包含虚拟或动态方法   声明中的指示。虚拟和动态方法,不像   静态方法,可以在后代类中重写。当一个   调用重写方法,类的实际(运行时)类型   或者在方法调用中使用的对象 - 而不是声明的类型   变量 - 确定要激活的实现。

     

要覆盖方法,请使用override指令重新声明它。一个   覆盖声明必须与订单中的祖先声明匹配   及其参数的类型和结果类型(如果有的话)。

     

...

     

在Delphi for Win32中,虚拟和动态方法是语义上的   当量。但是,它们在方法调用的实现方面有所不同   在运行时调度:虚拟方法优化速度,同时   动态方法优化代码大小。

     

通常,虚拟方法是最有效的实现方式   多态行为。动态方法在基类时很有用   声明了许多可以继承的可覆盖方法   应用程序中的后代类,但仅偶尔出现   重写的。

类静态方法就像类方法一样,它们是在类而不是实例上调用的。类static和class方法之间的区别在于类方法是传递包含类的Self指针,而类静态方法则不是。这意味着类方法可以是多态的,而类静态方法则不能。在此处阅读:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Methods#Class_Static_Methods

  

与类方法一样,可以在没有对象引用的情况下访问类静态方法。与普通的类方法不同,类静态方法根本没有Self参数。他们也无法访问任何实例成员。 (他们仍然可以访问类字段,类属性和类方法。)与类方法不同,类静态方法不能声明为虚拟。

在充分尊重的情况下,我建议您回答这个问题:How can I search for Delphi documentation?