如何传回函数/方法变量?

问题描述 投票:0回答:1

如果我想为方法变量创建一个getter访问器,getter不会返回变量,而是执行存储的代码并尝试传回结果。

unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMyFactory1 = function : TObject of object;
  TMyFactory2 = reference to function : TObject;

  TForm5 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    fMyFactory1 : TMyFactory1;
    fMyFactory2 : TMyFactory2;
  public
    { Public declarations }
    function getMyFactory1 : TMyFactory1;
    function getMyFactory2 : TMyFactory2;
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

function TForm5.getMyFactory1 : TMyFactory1;
begin
  result := fMyFactory1;
end;

function TForm5.getMyFactory2 : TMyFactory2;
begin
  result := fMyFactory2;
end;

procedure TForm5.Button1Click(Sender: TObject);
var
  aMF1 : TMyFactory1;
  aMF2 : TMyFactory2;
begin
  aMF1 := getMyFactory1; // Incompatible types: 'TObject' and 'TMyFactory1'
  aMF2 := getMyFactory2; // Incompatible types: 'TMyFactory2' and 'Procedure of object'
end;

end.

我可以为这种类型创建一个 setter,但我无法创建一个 getter。我怎样才能创建它?

delphi getter
1个回答
2
投票

只需在函数调用末尾添加 parentsis 即可。通过这种方式,您可以通知编译器您将获得函数的结果。否则你将执行由变量存储的函数并分配它们的结果。

var
  aMF1 : TMyFactory1;
  aMF2 : TMyFactory2;
begin
  aMF1 := getMyFactory1();
  aMF2 := getMyFactory2();
end;
© www.soinside.com 2019 - 2024. All rights reserved.