在 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/