2012-12-22 17 views
5

Mam dwa pakiety bpl: Core i Business, używane przez jedną aplikację. Core.bpl zawiera jednostkę User.pas z klasą TUser. TUser w Core.bpl ma tylko dwa podstawowe pola: Login i Hasło. Chcę rozwinąć klasę TUser w pakiecie Business z nowym polem: UserName. Chcę nazwać jednostkę biznesową jako jednostkę podstawową: User.pas.Przestrzenie nazw w Delphi XE2

Tworzę więc nową jednostkę User.pas w Business.bpl i umieszczam tam klasę TUser, która rozszerza TUser z Core.bpl. Teraz muszę podzielić TUser z Core.bpl i TUser z Business.bpl. I potrzebuję użyć "mocy przestrzeni nazw" tutaj :)

Przeczytałem Embarcadero doc page. Mówią, że można ustawić domyślny obszar nazw dla pakietu z nazywaniem go, np. Base.Core. Nazwałam moje pakiety jako Base.Core.bpl i Extra.Business.bpl. A skompilowane pliki mają taką nazwę. Jednak wszystkie jednostki w nich są nadal nazywane tak, jak poprzednio: User.pas -> User.dcu.

Teraz mam dwie klasy TUser w module User.pas: jedna w pakiecie Base.Core.bpl, druga w pakiecie Extra.Business.bpl. User.pas w dogrywce wygląda

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

Ale gdy chcę go skompilować, mam okno: „Usuń użytkownika Jednostka (e) Użytkownik nie stwierdzono w wymaganym pakiet podstawowy”.

Co mam zrobić, aby odziedziczyć nowego TUser z Base.User.TUser, tak jak może być na przykład w Javie?

P.S. Na wszelki wypadek używam Delphi XE2 IDE.

+0

Nie powinieneś nazywać ich "Unit Base.User" i "Unit Business.User", jeśli chcesz użyć takiej notacji? –

+0

Istnieje wiele jednostek w Core i Business ... I wszystkie są w SVN: (Zmiana nazwy wszystkich z nich jest ostatnią metodą ... Może być, można to zrobić łatwiej – omickron

+1

Jestem z tobą. dokumentacja mówi jedno, ale program zachowuje się zupełnie inaczej –

Odpowiedz

6

Domyślna przestrzeń nazw wydaje się być ciastem portalu - to kłamstwo. Dokumentacja, do której prowadzi link, nie pasuje do programu.

zrobiłem ten program:

MyCompany.Programs.MyProgram.dpr

program MyCompany.Programs.MyProgram; 

uses 
    MyUnit in 'MyUnit.pas'; 

begin 
end. 

MyUnit.pas

unit MyUnit; 

interface 

implementation 

end. 

a plik wynikowy .dcu nazwie MyUnit.dcu . Zgodnie z dokumentacją, do której został on podłączony, należy podać nazwę: MyCompany.Programs.MyUnit.dcu.

Uważam, że będziesz musiał wyraźnie określić przestrzeń nazw w nazwie jednostki.

+0

"będziesz musiał wyraźnie określić przestrzeń nazw w nazwie jednostki" Szkoda ... – omickron

+0

Przez całe życie nie rozumiem, dlaczego program nie pasuje do dokumentacji. Dokumentacja jest bardzo jasna. Trudno zobaczyć, jak moglibyśmy go nie zrozumieć. –

+0

Czy to samo dzieje się w XE3, nie wiesz? – omickron