如果我想为方法变量创建一个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。我怎样才能创建它?
只需在函数调用末尾添加 parentsis 即可。通过这种方式,您可以通知编译器您将获得函数的结果。否则你将执行由变量存储的函数并分配它们的结果。
var
aMF1 : TMyFactory1;
aMF2 : TMyFactory2;
begin
aMF1 := getMyFactory1();
aMF2 := getMyFactory2();
end;