对象FPC的接口,属性和过程

时间:2017-10-13 21:00:08

标签: lazarus freepascal

在实现我自己的观察者框架时,我遇到了一个问题:在getter中返回对象时,我无法执行对象的过程。我这里有Lazarus的示例程序。我该怎么做才能看到" TRUE"在控制台? (现在程序返回false)。它是一个完整的程序,你可以复制粘贴它。

program project1;

{$mode objfpc}

uses
  SysUtils,
  Classes;

type

  TEvent = procedure of object;

  { IInterface }

  IInterface = interface
    function GetEvent: TEvent;
    procedure SetEvent(AValue: TEvent);
    property Event: TEvent read GetEvent write SetEvent;
  end;

  { TMYClass }

  TMYClass = class(TInterfacedObject, IInterface)
  private
    FEvent: TEvent;
  public
    function GetEvent: TEvent;
    procedure SetEvent(AValue: TEvent);
    property Event: TEvent read GetEvent write SetEvent;
  end;

  { TAnotherClass }

  TAnotherClass = class
    FVariable: boolean;
    constructor Create;
    procedure Handler;
  end;

  { TAnotherClass }

  constructor TAnotherClass.Create;
  begin
    FVariable := False;
  end;

  procedure TAnotherClass.Handler;
  begin
    FVariable := True;
  end;

  function TMYClass.GetEvent: TEvent;
  begin
    Result := FEvent;
  end;

  procedure TMYClass.SetEvent(AValue: TEvent);
  begin
    FEvent := AValue;
  end;

var
  LInterface: IInterface;
  LAnother: TAnotherClass;

begin
  LInterface := TMYClass.Create;
  LAnother := TAnotherClass.Create;
  LInterface.Event:=@LAnother.Handler;
  LInterface.Event;
  WriteLn(LAnother.FVariable);
  ReadLn();
end.    

当我调试它时,看起来好像没有在TMYClass.GetEvent中分配结果。你知道吗,我的问题是什么?

0 个答案:

没有答案