1. ヘッダファイルでの名前空間
Delphiでは、ファイル名とユニット名が同じでなくてはなりません。そして、ユニット名は、名前空間の識別子として機能します。例えば、"SysUtils.pas"で宣言されている"IntToStr"関数の完全装飾名は、"SysUtils.IntToStr"となります。
VCLのC++Builder用ヘッダファイルは、それと互換性を取るような構成をしています。例えば、次のようになっています。
namespace Sysutils { // 各種の宣言と定義 } using namespace Sysutils;拡張子が"pas"のファイルをコンパイルすることで得られるヘッダファイルは、いずれも先の構成をしています。ヘッダファイルでusing指令を使うことは、一般的に言われる、C++の作法に反します。しかし、Delphiでは、標準として、名前空間の識別子を省略することができます。このusing指令は、それをエミュレートするものだと考えられます。
2. ソースファイルでの名前空間
ユニットを初めて、もしくは別名で保存する時、ソースファイルで宣言された名前空間の識別子は、イニシャルのみ大文字、他は小文字、という規則で変形されます。例えば、次のようになります。
"namespace MySysUtils" => "namespace Mysysutils"意図しない識別子を残さないように、注意が必要です。
3. フォームユニットと名前空間
プロジェクトに含まれるファイルの名前と、フォームユニットの名前は、識別子として重複することが許されていません。例えば、"Form1.h"と"TForm1* Form1"はどちらも"Form1"という識別子を持つことになります。この場合は、"Form1Unit.h"と"TForm1* Form1"のようにして、別の識別子を与えなければなりません。
また、ライブラリとして別途にコンパイルされたフォームユニットであっても、プロジェクト内でユニークな識別子を持っていないと、リンク時にエラーとなります。