Delphi中的类/静态常量 [英] Class/Static Constants in Delphi
问题描述
在Delphi中,我想要创建一个与一个类相关联的私有对象,并从该类的所有实例中访问它。在Java中,我会使用:
public class MyObject {
private static final MySharedObject mySharedObjectInstance = new MySharedObject ;
}
或者,如果MySharedObject需要更复杂的初始化,在Java中我可以实例化和初始化它在一个静态的初始化程序块中。
(你可能已经猜到...我知道我的Java,但我对Delphi更新)
无论如何,每次创建MyObject的实例时,我都不想实例化一个新的MySharedObject,但是我希望MySharedObject可以从MyObject的每个实例访问。 (这实际上是记录,这促使我试图弄清楚这一点 - 我使用的是Log4D,我想为每个具有日志功能的类存储一个TLogLogger作为一个类变量。)
在Delphi中做最好的方法是什么?
这是我将如何做使用类变量,类过程和初始化块:
unit MyObject;
接口
类型
TMyObject = class
private
class var FLogger:TLogLogger;
public
类过程SetLogger(value:TLogLogger);
类程序FreeLogger;
结束
实现
类过程TMyObject.SetLogger(value:TLogLogger);
begin
// sanity check here
FLogger:= Value;
结束
类程序TMyObject.FreeLogger;
开始
如果分配(FLogger)然后
FLogger.Free;
结束
初始化
TMyObject.SetLogger(TLogLogger.Create);
finalization
TMyObject.FreeLogger;
结束。
In Delphi, I want to be able to create an private object that's associated with a class, and access it from all instances of that class. In Java, I'd use:
public class MyObject {
private static final MySharedObject mySharedObjectInstance = new MySharedObject();
}
Or, if MySharedObject needed more complicated initialization, in Java I could instantiate and initialize it in a static initializer block.
(You might have guessed... I know my Java but I'm rather new to Delphi...)
Anyway, I don't want to instantiate a new MySharedObject each time I create an instance of MyObject, but I do want a MySharedObject to be accessible from each instance of MyObject. (It's actually logging that has spurred me to try to figure this out - I'm using Log4D and I want to store a TLogLogger as a class variable for each class that has logging functionality.)
What's the neatest way to do something like this in Delphi?
Here is how I'll do that using a class variable, a class procedure and an initialization 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中的类/静态常量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!