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 , Guid i 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 IVector kolekcji środowisko wykonawcze systemu Windows , IMap itd. 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. |