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;

また、Animalから、2番目、3番目などのレベルの他のすべての名前空間で定義されている他のすべてのクラスにアクセスするには、次のようにします。

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

インターネットで検索すると、インターフェイスを使用して何かを見つけたかもしれませんが、私の意見では、delphi xe2がネイティブであるものの場合、正しい解決策ではないという印象があります。おそらく私は間違っているか、古いバージョンのデルファイを参照しています。誠意をこめてわかりません。しかし、もちろん可能であれば、私はそれをするのと同じように知りたかったのです。どうもありがとうございました。

4

1 に答える 1

2

基本的に、XE2は、RTLユニットの名前をドット付きの名前に変更し、コマンドラインでドット付きプレフィックスが指定されたユニットをロードしようとします。

ドットが含まれるユニットを持つ機能は、Delphiに長い間存在していました。

名前空間について知っていることは何でも忘れてください。DelphiXE2はそのようなものではありません。名前空間階層内のユニットの移動は、名前空間の名前を変更する(プレフィックスを変更する)ことを意味します。たとえば、コンテナ/ファイル/クラスに特定の名前があり、その位置のみが名前空間階層内の場所を示すJavaとは異なります。

于 2011-09-15T20:14:47.517 に答える