To xbl :
非虚方法不再VMT中,它是早绑定的(编译期绑定).在生成Exe或Dll的时候地址就已经
定好了.
你完全可以把它看成一个普通方法,但它与普通方法有一点不同,它有一个隐含的
参数:Self(类的实例的指针).当调用的时候要把此参数传进去(由编译器执行,不用你
自己坐).
如果你的成员方法与类的实例无关(没有用到数据成员),你可以不创建类的实例就可以
调用它.
比如下面的例子不会出错:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyClass = Class
public
Procedure Test;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyClass.Test;
begin
ShowMessage('Called!');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:TMyClass;
begin
a.Test;
end;
end.