Class/Static Constants in Delphi

前端 未结 9 884
粉色の甜心
粉色の甜心 2021-02-05 12:06

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:

pub         


        
9条回答
  •  醉酒成梦
    2021-02-05 12:32

    The keywords you are looking for are "class var" - this starts a block of class variables in your class declaration. You need to end the block with "var" if you wish to include other fields after it (otherwise the block may be ended by a "private", "public", "procedure" etc specifier). Eg

    (Edit: I re-read the question and moved reference count into TMyClass - as you may not be able to edit the TMySharedObjectClass class you want to share, if it comes from someone else's library)

      TMyClass = class(TObject)
      strict private
        class var
          FMySharedObjectRefCount: integer;
          FMySharedObject: TMySharedObjectClass;
        var
        FOtherNonClassField1: integer;
        function GetMySharedObject: TMySharedObjectClass;
      public
        constructor Create;
        destructor Destroy; override;
        property MySharedObject: TMySharedObjectClass read GetMySharedObject;
      end;
    
    
    { TMyClass }
    constructor TMyClass.Create;
    begin
      if not Assigned(FMySharedObject) then
        FMySharedObject := TMySharedObjectClass.Create;
      Inc(FMySharedObjectRefCount);
    end;
    
    destructor TMyClass.Destroy;
    begin
      Dec(FMySharedObjectRefCount);
      if (FMySharedObjectRefCount < 1) then
        FreeAndNil(FMySharedObject);
    
      inherited;
    end;
    
    function TMyClass.GetMySharedObject: TMySharedObjectClass;
    begin
      Result := FMySharedObject;
    end;
    

    Please note the above is not thread-safe, and there may be better ways of reference-counting (such as using Interfaces), but this is a simple example which should get you started. Note the TMySharedObjectClass can be replaced by TLogLogger or whatever you like.

提交回复
热议问题