2012-12-22 97 views
5

我有兩個bpl軟件包:Core和Business,由一個應用程序使用。 Core.bpl包含帶有TUser類的單元User.pas。 Core.bpl中的TUser只有兩個基本字段:登錄名和密碼。 我想用新字段擴展業務包中的TUser類:用戶名。我想將業務單位命名爲基本單位:User.pas。Delphi XE2的命名空間

因此,我在Business.bpl中創建了一個新的User.pas單元,並放置了從Core.bpl擴展TUser的TUser類。 現在我需要從Business.bpl中分離Core.bpl和TUser的TUser。我需要在這裏使用「命名空間的力量」:)

我讀過Embarcadero doc page。他們說,你可以通過命名來設置包的默認命名空間,例如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中一樣?

P.S.以防萬一,我使用Delphi XE2 IDE。

+0

如果你想使用這種表示法,你不應該將它們命名爲'Unit Base.User'和'Unit Business.User'嗎? –

+0

核心和商業中有很多單位......並且所有這些都在SVN中:(重命名所有這些都是最後的方式......可能,一個可以更簡單嗎? – omickron

+1

我與你同在。文檔說有一件事,但程序的行爲完全不同 –

回答

6

默認的命名空間看起來像是Portal蛋糕 - 這是謊言。您鏈接到的文檔與程序不匹配。

我做了這個程序:

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

我相信你必須在單元名稱中明確指定名稱空間。

+0

」你必須在單元名稱中明確指定名稱空間「這真是可惜... – omickron

+0

對於我的生活,我不明白爲什麼該程序不符合文檔。文件非常清楚。很難看出我們怎麼會誤解它。 –

+0

這是否也發生在XE3中,你不知道嗎? – omickron