delphixe2中的名称空间
我有两个bpl包:Core和Business,由一个应用程序使用。 Core.bpl包含unit User.pas,其中包含TUser类。Core.bpl中的TUser只有两个基本字段:Login和Password。 我想在businesspackage中用新字段:UserName扩展TUser类。我想将业务单元命名为基本单元:User.pas 因此,我在Business.bpl中创建了一个新的unit User.pas,并将其放置在TUser类中,该类从Core.bpl扩展了TUser。 现在,我需要将TUser与Core.bpl分开,将TUser与Business.bpl分开。我需要在这里使用“名称空间的力量”: 我读过。他们说可以通过命名包来设置包的默认名称空间,例如Base.Core。 我将我的包命名为Base.Core.bpl和Extra.Business.bpl。编译后的文件命名为so。 但其中所有单元的名称仍与以前相同:User.pas->User.dcu 现在我有两个类TUser在modules User.pas中:一个在package Base.Core.bpl中,另一个在package Extra.Business.bpl中。 “额外”中的User.pas看起来像delphixe2中的名称空间,delphi,namespaces,delphi-xe2,Delphi,Namespaces,Delphi Xe2,我有两个bpl包:Core和Business,由一个应用程序使用。 Core.bpl包含unit User.pas,其中包含TUser类。Core.bpl中的TUser只有两个基本字段:Login和Password。 我想在businesspackage中用新字段:UserName扩展TUser类。我想将业务单元命名为基本单元:User.pas 因此,我在Business.bpl中创建了一个新的unit User.pas,并将其放置在TUser类中,该类从Core.bpl扩展了TUser。 现在
unit User;
interface
uses
Base.User;
type
TUser = class(Base.User.TUser)
end;
但当我想编译它时,我有一个窗口:“删除用户。在所需的包库中找到了一个或多个用户。”
例如,要像在Java中一样从Base.User.TUser继承新的TUser,我该怎么做
为了以防万一,我使用Delphi XE2 IDE。默认名称空间似乎是门户蛋糕——这是个谎言。您链接到的文档与程序不匹配 我制作了这个节目: MyCompany.Programs.MyProgram.dpr
program MyCompany.Programs.MyProgram;
uses
MyUnit in 'MyUnit.pas';
begin
end.
MyUnit.pas
unit MyUnit;
interface
implementation
end.
生成的.dcu文件名为MyUnit.dcu
。根据您链接到的文档,它应该命名为MyCompany.Programs.MyUnit.dcu
我相信您必须在单元名称中明确指定名称空间。如果您想使用这种表示法,您不应该将它们命名为“unit Base.User”和“unit Business.User”吗?核心和业务中有许多单元。。。所有这些都在SVN中:(重命名所有名称是最后一种方法…可能是,你能做得更简单吗?我同意你的观点。文档说明了一件事。但是程序的行为完全不同。如果可行,请设置“默认名称空间”。它在“目录/条件”中在早期版本的项目选项中。不知何故,我现在找不到它,但可以在“编译”中的“其他选项”中将其作为附加选项添加。我应该向“编译”中的“其他选项”传递什么?您必须在单元名中显式指定命名空间这很遗憾…就我的一生而言,我不明白为什么程序与文档不匹配。文档非常清楚。很难看出我们怎么会误解它。这也发生在XE3中,你不知道吗?看起来像一个bug。可能在Delphi中,可能在文档中…但是谢谢。只是澄清一下,在Delphi 2009-XE设置中项目选项中的默认名称空间导致它被添加到任何生成的dcu之前。如果默认名称空间是
MyCompany.Programs.MyProgram
,并且单元文件名为MyUnit.pas
,则生成的dcu是MyCompany.Programs.MyProgram.MyUnit.dcu
。如果单元显式命名为mycopany.Programs.MyProgram.MyUnit.pas
设置默认名称空间允许其他单位将其简称为MyUnit
。此设置已在XE2中删除,但正如Sertac在问题注释中指出的,命令行设置仍然存在。