名前空間と型の参照範囲 (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>StringGuidBoolean など、主に Windows ランタイム型に対応するパブリック型を格納します。 また、 Platform::Agile<T> および Platform::Box<T>などの、特殊なヘルパー型も含まれます。
Platform::Collections IVectorIMap などの Windows ランタイム コレクション インターフェイスを実装する、具体的なコレクション クラスを格納します。 これらの型は、platform.winmd ではなく、ヘッダー ファイル、collection.h で定義されます。
Platform::Details コンパイラによって使用され、パブリックでの使用を意図されていない型を格納します。

関連項目

型システム (C++/CX)