2011-09-15 85 views
1

我明白,命名空間是單位的容器;但我對它的工作理解不夠。 我試圖解釋更好,關於我想告訴。例如我有四個單位:命名空間和單位

1) Animals    // es: class TAnimals 
2) Animals.Dog   // es: class TDog 
3) Animals.Cat   // es: class TCat 
4) Animals.Cat.Female // es: class TFemale 

當然,這四個單位是在四個不同的文件。 如果我作出新的單元,並需要使用所有的話,我寫:

uses 
    Animals, Animals.Dog, Animals.Cat, Animals.Cat.Female 

現在,直到有極少數的問題不有,但都非常的時候?所以我想知道,我可以更好地管理,使一個只有單位:動物(命名空間根)包含所有其他的,有這樣的東西爲:

uses 
    Animals; 

而且有從動物中定義的所有其他類的訪問第二,第三等層面的所有其他命名空間,例如:

program Project1; 
uses 
    Animals; 
var 
    x: Animals; 
begin 
    x := TAnimals.Cat.Female.Create; 
    try 
    .... 
    finally 
    x.Free; 
    end; 
end. 

在互聯網搜索,也許我已經找到了使用界面,但我有印象,在我看來becouse不是正確的解決方案是非常複雜的東西,與delphi xe2是原生的。很可能我錯了,或者它指的是一些舊版本的delphi;我真的不知道。 但我想知道,因爲我這樣做,當然如果可能的話。 非常感謝。

+0

我不想這樣做,因爲它意味着在搜索路徑中找到的每個單元都以「動物」開頭。即使它從未使用過,也會默默地包含在內。不,我絕對不喜歡那樣! –

回答

2

基本上XE2只是將RTL單元重命名爲帶點的名稱,並嘗試在命令行上加載具有點綴前綴的單元。

很長一段時間以來,德爾福已經存在具有點的單元的能力。

忘記你對命名空間的所知,Delphi XE2不是那樣的。在命名空間層級中移動單元意味着重命名它(改變前綴),與例如容器/文件/類具有特定名稱的Java,只有其位置表示在命名空間層次結構中的位置。

+1

最後一句話是錯誤的,因爲此外,Java類文件(坐在正確的目錄中)還必須在第一個代碼行(package com.example; ... public class Bzz ...)中指定它的包名稱 - 所以如果你有這個文件,你也知道它在哪個目錄中。 – mjn

+0

啊,我認爲這不是強制性的。 –

+0

也可以在項目選項對話框中指定默認命名空間(在XE2中稱爲單元空間名稱) - 不僅在命令行 – mjn