2011-09-15 32 views
1

名前空間が単位のコンテナであることを理解しました。しかし私はそれとの仕事としてよく理解していません。 私は何を伝えたいかについて、より良く説明しようとしています。例えば、私は4つのユニットを持っています:名前空間と単位

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

もちろん、この4つのユニットは4つの異なるファイルです。非常にいくつかの問題がありませんまで、今

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

、しかしときは非常にある:私は新しいユニットを作成し、すべてのそれを使用する必要がある場合 は、私が書くのか?そのような何か持つ、動物(名前空間のルート)他のすべてが含まれている:だから、私は1つのだけでユニットを作る、私はより良い管理できるよう知りたかった

uses 
    Animals; 

をとで定義されたすべての他のクラスへの動物からのアクセスを持っています例えば第二、第三などレベルの他のすべての名前空間、:

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

インターネットでの検索は、たぶん私はインターフェイスを使って何かを発見した、しかし、私は私の意見でbecouseない正解が何かのために非常に複雑であるという印象を持っていますdelphi xe2はネイティブです。おそらく私は間違っているかもしれませんが、それはデルファイの古いバージョンを指しています。誠実に私は知らない。 しかし、私はそれが可能な限り、私はそれを行うにはもちろん、知りたかった。 もう一度非常にありがとう。

+0

検索パスに「動物」で始まるすべてのユニットが見つかりました。それが一度も使用されていなくても静かに含まれます。いいえ、私は間違いなくそれを好きではありません! –

答えて

2

基本的に、XE2は、RTLユニットの名前をドット付きの名前に変更するだけでなく、コマンドラインで指定されたドット付き接頭辞を使用してユニットをロードしようとします。

ドットが付いたユニットを持つ能力は、すでにDelphiで長年にわたって存在していました。

名前空間について知っているものは忘れてしまいますが、Delphi XE2はそのようなものではありません。ユニットを名前空間の階層に移動すると、名前の変更(接頭辞の変更)が行われます。コンテナ/ファイル/クラスが特定の名前を持ち、その位置だけがであるJavaは、名前空間階層の場所を通知します。

+1

Javaクラスファイル(適切なディレクトリにある)は、最初のコード行(package com.example; ... public class Bzz ...)でそのパッケージ名を指定する必要があるため、最後の文は間違っています。あなたがファイルを持っているならば、あなたはまたどのディレクトリにいなければならないかも知っています。 – mjn

+0

ああ、私はそれが必須ではないと思った。 –

+0

デフォルトの名前空間(XE2の単位空間名とも呼ばれます)は、プロジェクトオプションダイアログで指定することもできます。コマンドラインだけでなく、 – mjn