使用关键字dynamic声明过程会发生什么?
使用关键字static声明它会产生什么影响?
通过阅读文档可以回答这个问题.
该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参数.他们也无法访问任何实例成员.(他们仍然可以访问类字段,类属性和类方法.)与类方法不同,类静态方法不能声明为虚拟.
尽管如此,我还是向您推荐这个问题:如何搜索Delphi文档?