delphi - Delphi 中的类/静态常量

标签 delphi

在 Delphi 中,我希望能够创建一个与类关联的私有(private)对象,并从该类的所有实例访问它。在 Java 中,我会使用:

public class MyObject {
    private static final MySharedObject mySharedObjectInstance = new MySharedObject();
}

或者,如果 MySharedObject 需要更复杂的初始化,在 Java 中我可以在静态初始化 block 中实例化并初始化它。

(您可能已经猜到...我了解 Java,但我对 Delphi 还很陌生...)

无论如何,我不想每次创建 MyObject 实例时都实例化一个新的 MySharedObject,但我确实希望可以从 MyObject 的每个实例访问 MySharedObject。 (实际上是日志记录促使我尝试解决这个问题 - 我正在使用 Log4D,并且我想将 TLogLogger 存储为每个具有日志记录功能的类的类变量。)

在 Delphi 中做这样的事情最巧妙的方法是什么?

最佳答案

以下是我将如何使用类变量、类过程和初始化 block 来做到这一点:

unit MyObject;

interface

type

TMyObject = class
   private
     class var FLogger : TLogLogger;
   public
     class procedure SetLogger(value:TLogLogger);
     class procedure FreeLogger;
   end;

implementation

class procedure TMyObject.SetLogger(value:TLogLogger);
begin
  // sanity checks here
  FLogger := Value;
end;

class procedure TMyObject.FreeLogger;
begin
  if assigned(FLogger) then 
    FLogger.Free;
end;

initialization
  TMyObject.SetLogger(TLogLogger.Create);
finalization
  TMyObject.FreeLogger;
end.

关于delphi - Delphi 中的类/静态常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71766/

相关文章:

arrays - Delphi - TStack 容量困惑

json - 如何检查 SuperObject 中是否存在特定元素?

multithreading - 线程更新 GUI

c++ - 从 C++ 到 Delphi 的类型转换

delphi - TPanel 作为 MDI 应用程序中的启动屏幕

delphi - 使用 Delphi 读取和解析固定宽度文本文件的建议

delphi - 带 Bass.DLL 的简单婴儿监视器

delphi - Delphi TClientDataSet排序(插入)问题

delphi - 在接口(interface)定义中使用相同的 GUID 有危险吗?

delphi - 以可执行的免注册方式使用 COM 对象