2012-12-22 7 views
5

Ich habe zwei BPL-Pakete: Core und Business, die von einer Anwendung verwendet werden. Core.bpl enthält die Unit User.pas mit der TUser-Klasse. TUser in Core.bpl hat nur zwei Basisfelder: Login und Passwort. Ich möchte TUser-Klasse in Business-Paket mit neuem Feld erweitern: UserName. Und ich möchte Business Unit als Basiseinheit nennen: User.pas.Namespaces in Delphi XE2

Also, ich erstelle eine neue Einheit User.pas in Business.bpl und legen Sie dort TUser Klasse, die TUser von Core.bpl erweitert. Nun muss ich TUser von Core.bpl und TUser von Business.bpl zu teilen. Und ich muss "Power of Namespaces" hier verwenden :)

Ich habe Embarcadero doc page gelesen. Sie sagen, dass man den Standard-Namespace für ein Paket mit einer Benennung festlegen kann, z. Base.Core. Ich nannte meine Pakete als Base.Core.bpl und Extra.Business.bpl. Und kompilierte Dateien heißen so. Aber alle Einheiten in ihnen sind noch benannt wie zuvor: User.pas -> User.dcu.

Jetzt habe ich zwei Klassen TUser in Modulen User.pas: eine in Paket Base.Core.bpl, andere in Paket Extra.Business.bpl. User.pas in extra sieht aus wie

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

Aber wenn ich es kompilieren wollen, ich habe ein Fenster bekommt: "Benutzer entfernen Unit (s) User wurden in gewünschtem Paket Basis gefunden."

Was muss ich tun, um einen neuen TUser von Base.User.TUser zu erben, wie es beispielsweise in Java sein kann?

P.S. Nur für den Fall verwende ich Delphi XE2 IDE.

+0

Sollten Sie sie nicht als 'Unit Base.User' und 'Unit Business.User' benennen, wenn Sie solche Notation verwenden möchten? –

+0

Es gibt viele Einheiten in Core und in Business ... Und alle sind in SVN :(Umbenennung von allen ist der letzte Weg ... Vielleicht kann man es einfacher machen? – omickron

+1

Ich bin bei dir Dokumentation sagt eine Sache, aber das Programm verhält sich völlig anders. –

Antwort

6

Der Standardnamespace scheint Portalkuchen zu sein - es ist eine Lüge. Die Dokumentation, die Sie verlinken, stimmt nicht mit dem Programm überein.

Ich habe dieses Programm:

MyCompany.Programs.MyProgram.dpr

program MyCompany.Programs.MyProgram; 

uses 
    MyUnit in 'MyUnit.pas'; 

begin 
end. 

MyUnit.pas

unit MyUnit; 

interface 

implementation 

end. 

Und die resultierende Datei .dcu MyUnit.dcu benannt . Gemäß der Dokumentation, die Sie damit verknüpft haben, sollte sie MyCompany.Programs.MyUnit.dcu heißen.

Ich glaube, dass Sie den Namespace explizit im Namen der Einheit angeben müssen.

+0

"müssen Sie den Namespace explizit im Gerätenamen angeben" Das ist schade ... – omickron

+0

Für das Leben von mir kann ich nicht verstehen, warum das Programm nicht mit der Dokumentation übereinstimmt. Die Dokumentation ist sehr klar. Es ist schwer zu verstehen, wie wir es falsch verstehen könnten. –

+0

Passiert das auch in XE3, weißt du das nicht? – omickron