Przestrzenie nazw i widoczność typów (C++/CX)

Przestrzeń nazw to standardowa konstrukcja języka C++ do grupowania typów, które mają powiązane funkcje i uniemożliwiają kolizje nazw w bibliotekach. System typów środowisko wykonawcze systemu Windows wymaga, aby wszystkie publiczne typy środowisko wykonawcze systemu Windows, w tym te we własnym kodzie, muszą być zadeklarowane w przestrzeni nazw w zakresie przestrzeni nazw. Typy publiczne zadeklarowane w zakresie globalnym lub zagnieżdżone wewnątrz innej klasy spowodują błąd czasu kompilacji.

Plik winmd musi mieć taką samą nazwę, jaką ma główna przestrzeń nazw. Na przykład klasę o nazwie A.B.C.MyClass można utworzyć wystąpienie tylko wtedy, gdy jest ona zdefiniowana w pliku metadanych o nazwie A.winmd lub A.B.winmd lub A.B.winmd lub A.B.C.winmd. Nazwa pliku wykonywalnego nie jest wymagana do dopasowania nazwy pliku winmd.

Widoczność typu

W przestrzeni nazw typy środowisko wykonawcze systemu Windows — w przeciwieństwie do standardowych typów języka C++ — mają dostęp prywatny lub publiczny. Domyślnie ułatwienia dostępu są prywatne. Tylko typ publiczny jest widoczny dla metadanych i dlatego może być używany z aplikacji i składników, które mogą być napisane w językach innych niż C++. Ogólnie rzecz biorąc, reguły dla typów widocznych są bardziej restrykcyjne niż reguły dla typów niewidocznych, ponieważ widoczne typy nie mogą uwidaczniać pojęć specyficznych dla języka C++, które nie są obsługiwane w językach .NET lub JavaScript.

Uwaga

Metadane są używane tylko w czasie wykonywania przez języki .NET i JavaScript. Gdy aplikacja lub składnik języka C++ rozmawia z inną aplikacją lub składnikiem języka C++ — obejmuje to składniki systemu Windows, które są napisane w języku C++, wówczas nie jest wymagane użycie metadanych w czasie wykonywania.

Dostępność i widoczność elementu członkowskiego

W prywatnej klasie ref, interfejsie lub delegacie żadne elementy członkowskie nie są emitowane do metadanych, nawet jeśli mają dostęp publiczny. W publicznych klasach ref można kontrolować widoczność elementów członkowskich w metadanych niezależnie od ich ułatwień dostępu w kodzie źródłowym. Podobnie jak w przypadku standardowego języka C++, zastosuj zasadę najniższych uprawnień; nie uwidaczniaj członków w metadanych, chyba że absolutnie muszą być.

Użyj następujących modyfikatorów dostępu, aby kontrolować widoczność metadanych i dostępność kodu źródłowego.

Modyfikator Znaczenie Emitowane do metadanych?
private Domyślna dostępność. Takie samo znaczenie jak w standardowym języku C++. Nie.
protected Takie samo znaczenie jak w standardowym języku C++, zarówno w aplikacji, jak i w składniku i metadanych. Tak
public Takie samo znaczenie jak w standardowym języku C++. Tak
public protected -lub- protected public Chronione ułatwienia dostępu w metadanych, publiczne w aplikacji lub składniku. Tak
protected private lub private protected Niewidoczne w metadanych; chronione ułatwienia dostępu w aplikacji lub składniku.
internal lub private public Element członkowski jest publiczny w aplikacji lub składniku, ale nie jest widoczny w metadanych. Nie.

środowisko wykonawcze systemu Windows przestrzeni nazw

Interfejs API systemu Windows składa się z typów zadeklarowanych w przestrzeniach nazw Windows::*. Te przestrzenie nazw są zarezerwowane dla systemu Windows i nie można dodawać do nich typów. W przeglądarce obiektów można wyświetlić te przestrzenie nazw w pliku windows.winmd. Aby uzyskać dokumentację dotyczącą tych przestrzeni nazw, zobacz Interfejs API systemu Windows.

Przestrzenie nazw C++/CX

Język C++/CX definiuje niektóre typy w tych przestrzeniach nazw w ramach projekcji systemu typów środowisko wykonawcze systemu Windows.

Przestrzeń nazw opis
domyślna Zawiera wbudowane typy liczbowe i char16. Te typy znajdują się w zakresie w każdej przestrzeni nazw, a instrukcja nigdy nie jest wymagana using .
Platform Zawiera przede wszystkim typy publiczne, które odpowiadają typom środowisko wykonawcze systemu Windows, takim jak Array<T>, String, Guidi Boolean. Obejmuje również wyspecjalizowane typy pomocnika, takie jak Platform::Agile<T> i Platform::Box<T>.
Platform::Collections Zawiera konkretne klasy kolekcji, które implementują interfejsy IVectorkolekcji środowisko wykonawcze systemu Windows , IMapitd. Te typy są definiowane w pliku nagłówkowym collection.h, a nie w pliku platform.winmd.
Platform::Details Zawiera typy używane przez kompilator i nie są przeznaczone do użytku publicznego.

Zobacz też

System typów (C++/CX)