名前空間と型の参照範囲 (C++/CX)
名前空間は、関連する機能を持つ型をグループ化し、ライブラリ内での名前の衝突を回避するための、標準の C++ 構造体です。 Windows ランタイム型システムでは、独自コード内にあるものも含め、すべてのパブリック Windows ランタイム型を名前空間スコープの名前空間で宣言する必要があります。 パブリック型をグローバル スコープで宣言したり、別のクラスの中に入れ子にしたりすると、コンパイル時エラーが発生します。
.winmd ファイルには、ルート名前空間と同じ名前が必要です。 たとえば、A.B.C.MyClass という名前のクラスは、A.winmd または A.B.winmd または A.B.C.winmd という名前のメタデータ ファイルで定義されている場合のみインスタンス化できます。 実行可能ファイルの名前が .winmd ファイル名と一致する必要はありません。
型の可視性
名前空間では、Windows ランタイム 型は標準 C++ 型とは異なり、プライベートまたはパブリックのいずれかのアクセシビリティを持ちます。 既定では、アクセシビリティはプライベートです。 メタデータから参照できるのはパブリック型だけです。したがって、C++ 以外の言語で記述されている可能性もあるコンポーネントとアプリから利用できるのもパブリック型だけです。 一般に、参照可能な型の規則は、参照できない型の規則よりも制限的です。これは、.NET 言語および JavaScript でサポートされていない C++ 固有の概念を参照可能な型が公開できないためです。
Note
.NET 言語および JavaScript がメタデータを利用できるのは、実行時のみです。 C ++ アプリまたはコンポーネントが、他の C ++ アプリまたはコンポーネント (これには、すべて C++ で記述された Windows コンポーネントも含まれます) と通信中のときは、メタデータの実行時利用は不要です。
メンバーのアクセシビリティおよび可視性
プライベートの ref クラス、インターフェイス、またはデリゲートでは、パブリック アクセシビリティがあっても、メンバーはメタデータには出力されません。 パブリック ref クラスでは、ソース コードでのアクセシビリティとは無関係に、メタデータのメンバーの可視性を制御できます。 標準 C++ と同様に、最小特権の基本原則を適用します。絶対にそうする必要がある場合を除き、メタデータでメンバーを可視にしないでください。
次のアクセス修飾子を使用して、メタデータの可視性およびソース コード アクセシビリティを制御します。
変更者 | 意味 | メタデータに出力されるか。 |
---|---|---|
private |
既定のアクセシビリティ。 標準 C++ の場合と同じ意味です。 | いいえ |
protected |
標準 C++ の場合と同じ意味であり、アプリまたはコンポーネント内およびメタデータ内では両方。 | はい |
public |
標準 C++ の場合と同じ意味です。 | はい |
public protected または protected public |
メタデータでは保護されたアクセシビリティ、アプリまたはコンポーネント内ではパブリック。 | はい |
protected private または private protected |
メタデータでは非可視。アプリまたはコンポーネント内では保護されたアクセシビリティ。 | |
internal または private public |
メンバーは、アプリまたはコンポーネント内ではパブリックですが、メタデータでは非可視です。 | いいえ |
Windows ランタイムの名前空間
Windows API は、Windows::* 名前空間で宣言されている型で構成されます。 これらの名前空間は Windows 用に予約されており、それらの名前空間に型を追加できません。 オブジェクト ブラウザーでは、windows.winmd ファイル内でこれらの名前空間を表示できます。 これらの名前空間に関するドキュメントについては、「 Windows API」を参照してください。
C++/CX 名前空間
C++/CX は、Windows ランタイム型システムのプロジェクションの一部として、これらの名前空間の特定の型を定義します。
名前空間 | 説明 |
---|---|
default | 組み込みの数値型と char16 型を格納します。 これらの型はすべての名前空間のスコープ内にあり、 using ステートメントは必要ではありません。 |
Platform |
Array<T> 、String 、Guid 、Boolean など、主に Windows ランタイム型に対応するパブリック型を格納します。 また、 Platform::Agile<T> および Platform::Box<T> などの、特殊なヘルパー型も含まれます。 |
Platform::Collections |
IVector 、IMap などの Windows ランタイム コレクション インターフェイスを実装する、具体的なコレクション クラスを格納します。 これらの型は、platform.winmd ではなく、ヘッダー ファイル、collection.h で定義されます。 |
Platform::Details |
コンパイラによって使用され、パブリックでの使用を意図されていない型を格納します。 |