Dela via


Namnområden och typsynlighet (C++/CX )

Ett namnområde är en C++-standardkonstruktion för grupperingstyper som har relaterade funktioner och för att förhindra namnkollisioner i bibliotek. Windows Runtime-typsystemet kräver att alla offentliga Windows Runtime-typer, inklusive de i din egen kod, måste deklareras i ett namnområde i namnområdets omfång. Offentliga typer som deklareras i globalt omfång eller kapslas i en annan klass orsakar ett kompileringsfel.

En .winmd-fil måste ha samma namn som rotnamnområdet. En klass med namnet A.B.C.MyClass kan till exempel bara instansieras om den definieras i en metadatafil med namnet A.winmd eller A.B.winmd eller A.B.C.winmd. Namnet på den körbara filen krävs inte för att matcha .winmd-filnamnet.

Typens synlighet

I ett namnområde har Windows Runtime-typer, till skillnad från C++-standardtyper, antingen privata eller offentliga hjälpmedel. Som standard är tillgängligheten privat. Endast en offentlig typ är synlig för metadata och kan därför användas från appar och komponenter som kan skrivas på andra språk än C++. I allmänhet är reglerna för synliga typer mer restriktiva än reglerna för icke-synliga typer eftersom synliga typer inte kan exponera C++-specifika begrepp som inte stöds i .NET-språk eller JavaScript.

Anmärkning

Metadata används endast vid körning av .NET-språk och JavaScript. När en C++-app eller komponent pratar med en annan C++-app eller -komponent – detta inkluderar Windows-komponenter ,som alla är skrivna i C++– krävs ingen körningsförbrukning av metadata.

Tillgänglighet och synlighet för medlemmar

I en privat referensklass, ett gränssnitt eller ett ombud genereras inga medlemmar till metadata, även om de har offentlig tillgänglighet. I offentliga referensklasser kan du styra synligheten för medlemmar i metadata oberoende av deras tillgänglighet i källkoden. Precis som i standard C++, tillämpa principen om lägsta behörighet; gör inte dina medlemmar synliga i metadata om de inte absolut måste vara det.

Använd följande åtkomstmodifierare för att styra både metadatasynlighet och källkodstillgänglighet.

Modifikator Innebörd Genereras till metadata?
private Standardtillgänglighet. Samma betydelse som i standard-C++. Nej
protected Samma betydelse som i standard-C++, både i appen eller komponenten och i metadata. Ja
public Samma betydelse som i standard-C++. Ja
public protected protected public Skyddad tillgänglighet i metadata, offentlig i appen eller komponenten. Ja
protected private eller private protected Visas inte i metadata; skyddad tillgänglighet i appen eller komponenten.
internal eller private public Medlemmen är offentlig i appen eller komponenten, men visas inte i metadata. Nej

Windows Runtime-namnområden

Windows-API:et består av typer som deklareras i Windows::*-namnområden. Dessa namnområden är reserverade för Windows och typer kan inte läggas till i dem. I Object Browser kan du visa dessa namnområden i filen windows.winmd. Dokumentation om dessa namnområden finns i Windows API.

C++/CX-namnområden

C++/CX definierar vissa typer i dessa namnområden som en del av projektionen av Windows Runtime-typsystemet.

Namespace Beskrivning
förval Innehåller de inbyggda numeriska typerna och char16-typerna. Dessa typer finns i omfånget i varje namnområde och en using instruktion krävs aldrig.
Platform Innehåller främst offentliga typer som motsvarar Windows Runtime-typer som Array<T>, String, Guidoch Boolean. Innehåller även specialiserade hjälptyper som Platform::Agile<T> och Platform::Box<T>.
Platform::Collections Innehåller de betongsamlingsklasser som implementerar Windows Runtime-samlingsgränssnitten IVector, IMapoch så vidare. Dessa typer definieras i en rubrikfil, collection.h, inte i platform.winmd.
Platform::Details Innehåller typer som används av kompilatorn och som inte är avsedda för offentlig förbrukning.

Se även

Typsystem (C++/CX)