//我定义一个类如下:
type
TMyClass = class
private
public
procedure Test;
end;
//实现代码如下
procedure TMyClass.Test;
begin
ShowMessage('hello');
end;
//我在窗体上放个button1,双击button1代码如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
oMyClass: TMyClass;
begin
// oMyClass:= TMyClass.Create;
oMyClass.Test; //????问题:我在注释掉上面一行时(Create代码)为什么这一行也能成功呢。
//不是对像只有实例化后才可以用吗??难道不创建对像可以直接引用对像方法??
//FreeAndNil(oMyClass)
end;
类似于一个公用函数了?
也就是说,在编译期,编译器就已经知道了这个方法的地址。所以类不用实例化也可以调用。
如果在方法后加上virtual就必须在运行期通过地址计算才能算出该方法的地址。
建议不要这么用!
不容易理解,如果在方法里面加变量之类的东西,就会有问题!因此如果做为类方法使用,最好明确定义为类方法 比如前面加class可以理解为没有实例化的对象,对方除了定义为类方法的方法,不能调用调用类方法,可以使用 类名.类方法!