在 Delphi 中将类函数放到多个单元中?

xuo3flqw  于 2023-02-12  发布在  其他
关注(0)|答案(2)|浏览(171)

我用的是Delphi XE3,目前我的单元里函数太多,其中一个很长,所以我想把那个长函数放到另一个单元里,可以吗?
我尝试如下:
单元1:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Test;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
...

单元2:

unit Unit2;

interface

implementation

uses Unit1;

procedure TForm1.Test;
begin
end;

end.

但是编译失败,显示"[dcc32错误] Unit1.pas(16):E2065未满足的转发或外部声明:'TForm1.测试'"

hm2xizp9

hm2xizp91#

你不能把类方法的实现移到另一个单元。但是,你可以把它的内部代码重构成另一个单元中它自己的函数,然后从你的类方法中调用那个函数,例如:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Test;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test;
end;

procedure TForm1.Test;
begin
  Unit2.DoTest;
end;

end.
unit Unit2;

interface

procedure DoTest;

implementation

procedure DoTest;
begin
  ...
end;

end.
guykilcj

guykilcj2#

1.属于同一类的函数必须在一个单元中(您的错误原因)
1.声明和实现必须在同一单元中
1.如果要将其拆分,则需要使它们位于不同的类中

相关问题