对象实例没有创建它

Raf*_*cci 2 delphi

我想知道是否有可能没有直接调用任何构造函数的对象实例.像这样的东西:

var
  aObject : TMyObject;
begin
  aObject.MyMethod; //will cause an AV, but is it possible?
end;
Run Code Online (Sandbox Code Playgroud)

编辑:

我知道静态方法,但那不是我想要的.我正在寻找一种方法来获取构造函数,而无需显式调用它.

Cos*_*und 12

Delphi的对象都是堆分配的:您不能简单地声明一个对象并在其上调用方法,就像您在C++中所做的那样,您必须调用构造函数来分配和设置内存.但请注意,即使在C++中,当你这样做时,你实际上也在调用构造函数!

也许你可以逃脱记录而不是对象?例:

type
  TMyObject = record // name intentionally left as in OP's code
    procedure MyMethod;
  end;

procedure TMyObject.MyMethod;
begin
  // Do something
end;

// Use example:
procedure Test;
var MyObject: TMyObject; // TMyObject is a record so it is stack-allocated
begin
  MyObject.MyMethod; // Works.
end;
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 9

如你所知,这很奇怪.但是,只要该方法是静态的并且不引用Self,那么这将起作用.

当然,这样的事物更好地称为类方法.也许这就是你想要的?

type
  TMyObject = class
    class procedure MyClassMethod;
  end;
...
TMyObject.MyClassMethod;
Run Code Online (Sandbox Code Playgroud)

编辑

你编辑了你的问题.显然你知道所有关于静态方法的知识.您不希望在未初始化的对象上调用方法.

实际上,您现在声明您希望在未初始化的对象实例上调用方法的行为导致正在创建实例并调用该方法.

这是不可能的.任何为你调用构造函数的东西都没有魔力.