Share via


命名空間和類型可視性 (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++ 特定概念。

注意

.NET 語言和 JavaScript 只有在執行階段才會使用中繼資料。 當 C++ 應用程式或元件與其他 C++ 應用程式或元件 (包括 Windows 元件) 通訊時,由於都是以 C++ 撰寫,因此不需要在執行階段使用中繼資料。

成員存取範圍和可視性

在私用 ref 類別、介面或委派中,不會將任何成員發出至中繼資料,即使這些成員具有公用存取範圍亦然。 在公用 ref 類別中,您可以單獨控制中繼資料之成員的可視性,而不需要考量這些成員在原始程式碼中的存取範圍。 如同 Standard C++,請套用最低權限原則;除非絕對必要,否則請不要在中繼資料內顯示成員。

使用下列存取修飾詞控制中繼資料可視性和原始程式碼存取範圍。

修飾詞 意義 發出至中繼資料?
private 預設存取範圍。 等同於在 Standard C++ 中。 No
protected 等同於在 Standard C++ 中,同時在應用程式 (或元件) 和中繼資料內。 Yes
public 等同於在 Standard C++ 中。 Yes
public protected -或- protected public 在中繼資料內為受保護存取範圍,在應用程式或元件內是公用的。 Yes
protected privateprivate protected 在中繼資料內是不可見的,在應用程式或元件內為受保護存取範圍。
internalprivate public 此成員在應用程式或元件內是公用的,但是在中繼資料內是不可見的。 No

Windows 執行階段命名空間

Windows API 是由 Windows::* 命名空間中宣告的類型所組成。 這些命名空間保留給 Windows,不能在其中加入類型。 在 [ 物件瀏覽器] 中,您可以檢視 windows.winmd 檔案中的命名空間。 如需這些命名空間的文件,請參閱 Windows API

C++/CX 命名空間

C++/CX 會將這些命名空間中的特定類型定義為Windows 執行階段類型系統的投影的一部分。

命名空間 描述
預設值 包含內建的數字和 char16 類型。 這些類型在每個命名空間的範圍內,不需要 using 陳述式。
Platform 包含主要對應至 、、 StringGuidBooleanArray<T> Windows 執行階段類型的公用型別。 同時也包含特製化協助程式類型,例如 Platform::Agile<T>Platform::Box<T>
Platform::Collections 包含實作Windows 執行階段集合介面 IVectorIMap 等的具體集合類別。 這些類型在標頭檔 collection.h 中定義,而不是在 platform.winmd 中。
Platform::Details 包含編譯器使用的類型,而不開放使用。

另請參閱

類型系統 (C++/CX)