5

我有两个 bpl 包:Core 和 Business,由一个应用程序使用。Core.bpl 包含单元 User.pas,其中包含 TUser 类。Core.bpl 中的 TUser 只有两个基本字段:登录和密码。我想用新字段扩展业务包中的 TUser 类:用户名。我想将业务单元命名为基本单元:User.pas。

因此,我在 Business.bpl 中创建了一个新单元 User.pas,并在其中放置了从 Core.bpl 扩展 TUser 的 TUser 类。现在我需要将 TUser 与 Core.bpl 和 TUser 与 Business.bpl 分开。我需要在这里使用“命名空间的力量”:)

我已经阅读了Embarcadero 文档页面。他们说可以通过命名来设置包的默认命名空间,例如 Base.Core。我将我的包命名为 Base.Core.bpl 和 Extra.Business.bpl。并且编译的文件是这样命名的。但是它们中的所有单元仍然像以前一样命名:User.pas -> User.dcu。

现在我在 User.pas 模块中有两个类 TUser:一个在包 Base.Core.bpl 中,另一个在包 Extra.Business.bpl 中。额外的 User.pas 看起来像

unit User;
interface
uses
  Base.User;
type
  TUser = class(Base.User.TUser)
  end;

但是当我想编译它时,我有一个窗口:“删除用户。单位用户在所需的包基础中找到。”

例如,我该怎么做才能从 Base.User.TUser 继承新的 TUser,就像它可以在 Java 中一样?

PS 以防万一,我使用 Delphi XE2 IDE。

4

1 回答 1

6

默认命名空间似乎是 Portal cake——这是一个谎言。您链接到的文档与程序不匹配。

我做了这个程序:

MyCompany.Programs.MyProgram.dpr

program MyCompany.Programs.MyProgram;

uses
  MyUnit in 'MyUnit.pas';

begin
end.

我的单位.pas

unit MyUnit;

interface

implementation

end.

生成的 .dcu 文件名为MyUnit.dcu. 根据您链接到它的文档,它应该被命名为MyCompany.Programs.MyUnit.dcu.

我相信您必须在单元名称中明确指定命名空间。

于 2012-12-22T19:47:12.490 回答