Class 类方法-此形式的方法调用仅允许用于类方法

Class 类方法-此形式的方法调用仅允许用于类方法,class,delphi,Class,Delphi,我正在Delphi中创建一个类过程(其中包含另一个过程),并收到以下错误消息: 这种形式的方法调用只允许用于类方法 以下是我为测试而创建的一些代码: type TTestClass = class private procedure PrivateProc; public class procedure PublicProc; end; procedure TTestClass.PrivateProc; begin ShowMessage('TestClas

我正在Delphi中创建一个类过程(其中包含另一个过程),并收到以下错误消息:

这种形式的方法调用只允许用于类方法

以下是我为测试而创建的一些代码:

type
  TTestClass = class
  private
    procedure PrivateProc;
  public
    class procedure PublicProc;
  end;

procedure TTestClass.PrivateProc;
begin
  ShowMessage('TestClass.PrivateProc');
end;

class procedure TTestClass.PublicProc;
begin
  PrivateProc; // ERROR: This form of method call only allowed for class methods
  ShowMessage('TestClass.PublicProc');
end;
第一种方法:将PrivateProc转换为类过程。这种方法的问题是,PublicProc内部可能有许多其他私有过程和函数,而其他过程和函数也在其中

type
  TTestClass = class
  private
    class procedure PrivateProc;
  public
    class procedure PublicProc;
  end;

class procedure TTestClass.PrivateProc;
begin
  ShowMessage('TestClass.PrivateProc');
end;

class procedure TTestClass.PublicProc;
begin
  PrivateProc;
  ShowMessage('TestClass.PublicProc');
end;
第二种方法:在调用PrivateProc之前在PublicProc中创建自己的类

type
  TTestClass = class
  private
    procedure PrivateProc;
  public
    class procedure PublicProc;
  end;

procedure TTestClass.PrivateProc;
begin
  ShowMessage('TestClass.PrivateProc');
end;

class procedure TTestClass.PublicProc;
begin
  with TTestClass.Create do
  try
    PrivateProc;
  finally
    Free;
  end;
  ShowMessage('TestClass.PublicProc');
end;

请问,我为什么会收到这个错误消息(找不到合理的解释)以及解决这个问题的最佳方法是什么?谢谢

类过程没有对“拥有”它的对象的引用,只有拥有它的类。因此,它不能调用需要引用拥有它的类的过程,如PrivateProc。如果您将PrivateProc设置为类过程,或者将publicProc设置为非类过程,那么它将起作用。

正如您已经发现的,您需要一个对象实例来调用非
过程。
过程不需要对象实例。在第一个示例中,您的
PublicProc
无法访问
TTestClass
的对象实例,因此出现错误。好的,理解。非常感谢。