Obory názvů a viditelnost typů (C++/CX )
Obor názvů je standardní konstruktor jazyka C++ pro seskupování typů, které mají související funkce a brání kolizím názvů v knihovnách. Systém typů prostředí Windows Runtime vyžaduje, aby všechny veřejné typy prostředí Windows Runtime, včetně těch ve vašem vlastním kódu, byly deklarovány v oboru názvů v oboru názvů. Veřejné typy deklarované v globálním oboru nebo vnořené uvnitř jiné třídy způsobí chybu v době kompilace.
Soubor .winmd musí mít stejný název jako kořenový obor názvů. Například třídu s názvem A.B.C.MyClass lze vytvořit instanci pouze v případě, že je definována v souboru metadat s názvem A.winmd nebo A.B.winmd nebo A.B.C.winmd. Název spustitelného souboru se nevyžaduje, aby odpovídal názvu souboru .winmd.
Viditelnost typů
V oboru názvů prostředí Windows Runtime typy – na rozdíl od standardních typů C++ – mají privátní nebo veřejnou přístupnost. Ve výchozím nastavení je přístupnost soukromá. Metadata vidí jenom veřejný typ a je proto použitelný z aplikací a komponent, které můžou být napsané v jiných jazycích než C++. Obecně platí, že pravidla pro viditelné typy jsou více omezující než pravidla pro typy, které nejsou viditelné, protože viditelné typy nemohou vystavit koncepty specifické pro jazyk C++, které nejsou podporovány v jazycích .NET nebo JavaScriptu.
Poznámka:
Metadata se využívají pouze za běhu jazyky .NET a JavaScript. Když aplikace nebo komponenta C++ mluví s jinou aplikací nebo komponentou jazyka C++, zahrnuje to součásti Systému Windows, které jsou všechny napsané v jazyce C++, není potřeba používat metadata za běhu.
Přístupnost a viditelnost členů
V privátní třídě ref, rozhraní nebo delegátu se do metadat nevygenerují žádní členové, a to ani v případě, že mají veřejnou přístupnost. Ve veřejných třídách ref můžete řídit viditelnost členů v metadatech nezávisle na jejich přístupnosti ve zdrojovém kódu. Stejně jako ve standardním jazyce C++ použijte zásadu nejnižších oprávnění; nezviditelněte členy v metadatech, pokud to vůbec nesmí být.
Pomocí následujících modifikátorů přístupu můžete řídit viditelnost metadat i přístupnost zdrojového kódu.
Modifikátor | Význam | Vygenerováno do metadat? |
---|---|---|
private |
Výchozí přístupnost. Stejný význam jako ve standardním jazyce C++. | No |
protected |
Stejný význam jako ve standardním jazyce C++, a to jak v rámci aplikace, tak i v metadatech. | Ano |
public |
Stejný význam jako ve standardním jazyce C++. | Ano |
public protected -nebo- protected public |
Chráněná přístupnost v metadatech, veřejná v aplikaci nebo komponentě. | Ano |
protected private nebo private protected |
V metadatech se nezobrazuje; chráněná přístupnost v aplikaci nebo komponentě. | |
internal nebo private public |
Člen je veřejný v aplikaci nebo komponentě, ale není viditelný v metadatech. | No |
prostředí Windows Runtime obory názvů
Rozhraní API systému Windows se skládá z typů deklarovaných v oborech názvů Windows::*. Tyto obory názvů jsou vyhrazené pro Windows a do nich nelze přidat typy. V prohlížeči objektů můžete tyto obory názvů zobrazit v souboru windows.winmd. Dokumentaci k těmto oborům názvů najdete v tématu Rozhraní API systému Windows.
Obory názvů C++/CX
C++/CX definují určité typy v těchto oborech názvů jako součást projekce systému typů prostředí Windows Runtime.
Obor názvů | Popis |
---|---|
default | Obsahuje předdefinované číselné typy a typy char16. Tyto typy jsou v oboru názvů a using příkaz není nikdy vyžadován. |
Platform |
Obsahuje především veřejné typy, které odpovídají typům prostředí Windows Runtime, jako Array<T> jsou , String , Guid a Boolean . Zahrnuje také specializované pomocné typy, například Platform::Agile<T> a Platform::Box<T> . |
Platform::Collections |
Obsahuje konkrétní třídy kolekce, které implementují prostředí Windows Runtime rozhraní IVector kolekce atdIMap . Tyto typy jsou definovány v souboru hlaviček, collection.h, nikoli v platform.winmd. |
Platform::Details |
Obsahuje typy používané kompilátorem a nejsou určeny pro veřejnou spotřebu. |