在Delphi中有4种方法类型,分别是:static(静态), virtual(虚), dynamic(动态) 以及message(消息处理)。
先建立示例对象如下:
type
Foo = class
procedure IAmAStatic;
procedure IAmAVirtual; virtual;
procedure IAmADynanic; dynamic;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
1.静态方法: IAmAStatic
静态方法是缺省类型,类似如常规的过程和函数。静态方法的执行速度最快。
静态方法不能被覆盖,无法实现多态性。
2.虚方法: IAmAVirtual
虚方法的调用方法和静态方法一样,而且可以被覆盖。
虚方法执行速度较快,但是消耗内存较多。
3.动态方法: IAmADynanic
动态方法是具有不同调度机制的虚方法。
动态方法与虚方法想比占用内存较少,但是速度稍慢。
4.消息处理方法: IAmAMessage
消息处理方法通常用于创建对Windows消息的响应。
以下将简单介绍方法的覆盖和重载。
1.覆盖:
type
FooChild = class(Foo)
procedure IAmAVirtual; override;
procedure IAmADynanic; override;
procedure IAmAMessage(var M : TMessage); message WM_SomeMessage;
end;
2.重载:
type
TSomeClass = class
procedure AMethod(I : Integer); overload;
procedure AMethod(S : String); overload;
procedure AMethod(D : Double); overload;
end;
最后再简单介绍一下reintroduce和self关键字的用法。
1.reintroduce:
在极少数的情况下,我们可能打算加入一个方法到自己的类中,从而完全取代祖先类中的同名方法。注意,这不是一个覆盖的行为。
这时我们可以使用reintroduce关键字,不然编译器会作出"新方法隐藏积累里某个方法"的提示。
例如:
type
TSomeBase = class
procedure Cooper;
end;
TSomeClass = class(TSomeBase)
procedure Cooper; reintroduce;
end;
2.Self:
在所有对象方法中都有一个隐藏的self变量,其指向调用该方法的类实例的指针。