You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Delphi的函数类型变量创建正确的Getter访问器?

问题根源

你遇到的编译错误,核心原因是调用无参数Getter函数时未加括号:Delphi会将无括号的函数名解析为成员方法指针(而非执行函数获取返回值),导致类型不匹配。

解决方法

方法1:调用Getter时添加括号

直接修改Button1Click中的代码,给Getter函数调用加上括号,明确执行函数并获取返回值:

procedure TForm5.Button1Click(Sender: TObject);
var
  aMF1 : TMyFactory1;
  aMF2 : TMyFactory2;
begin
  aMF1 := getMyFactory1(); // 添加括号执行函数,返回TMyFactory1类型值
  aMF2 := getMyFactory2(); // 添加括号执行函数,返回TMyFactory2类型值
end;

方法2:使用Delphi属性替代自定义Getter(更符合语言习惯)

Delphi的属性机制天然支持方法类型的读取,无需手动编写get前缀函数,代码更简洁易读:

步骤1:修改类的声明

在TForm5的public段替换原Getter函数为属性:

type
  TForm5 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    fMyFactory1 : TMyFactory1;
    fMyFactory2 : TMyFactory2;
  public
    // 直接绑定私有字段的属性(无需额外逻辑时推荐)
    property MyFactory1: TMyFactory1 read fMyFactory1;
    property MyFactory2: TMyFactory2 read fMyFactory2;
    
    // 如果需要在读取时添加额外逻辑,仍可指定自定义Getter函数
    // property MyFactory1: TMyFactory1 read getMyFactory1;
    // property MyFactory2: TMyFactory2 read getMyFactory2;
  end;

步骤2:修改调用代码

在Button1Click中直接通过属性名读取值:

procedure TForm5.Button1Click(Sender: TObject);
var
  aMF1 : TMyFactory1;
  aMF2 : TMyFactory2;
begin
  aMF1 := MyFactory1;
  aMF2 := MyFactory2;
end;

内容的提问来源于stack exchange,提问作者SOLID Developper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:51