给出以下示例,有没有什么方法可以使类TPrivateUseOnly私有化。将其移至implementation部分?恕我直言,这是不可能的。但是我不确定是否错过了新一代Delphi语言的某些OOP功能。

unit Unit1;

interface

type
  TPrivateUseOnly = class(TObject)
  end;

  TMyClass = class(TObject)
  strict private
    FXYZ: TPrivateUseOnly;
  public
    ...
  end;

implementation

end.

最佳答案

您可以创建一个嵌套类。如果将此类放在严格的私有部分中,那么它将无法用于任何其他单元:

type
  TMyClass = class(TObject)
  strict private
    type
      TPrivateUseOnly = class(TObject)
        test: boolean;
      end;
  strict private
    FXYZ: TPrivateUseOnly;
  public
    ...
  end;


如果然后尝试在另一个单元中访问私有类,则会收到以下错误:

[DCC Error] Unit1.pas(28): E2361 Cannot access private symbol TMyClass.TPrivateUseOnly


当您在TMyClass中引用嵌套类时,可以使用TPrivateUseOnly访问它。如果需要在设备内部访问它,则它必须为private,并且可以使用TMyClass.TPrivateUseOnly访问它。

10-06 10:38