Delphi中的类/静态常量 [英] Class/Static Constants in Delphi

查看:118
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆