Megosztás a következőn keresztül:


Típusrendszer áttekintése (C++/CX)

A Windows Runtime architektúrával a C++/WinRT, a C++/CX, a Visual Basic, a Visual C# és a JavaScript használatával írhat alkalmazásokat és összetevőket. Közvetlenül hozzáférhetnek a Windows API-hoz, és együttműködhetnek más Windows-futtatókörnyezeti alkalmazásokkal és -összetevőkkel. A C++ nyelven írt univerzális Windows-platform (UWP) alkalmazások natív kódra vannak lefordítva, amelyek közvetlenül a processzorban futnak. A C# vagy Visual Basic nyelven írt UWP-alkalmazások microsoftos köztes nyelvre (MSIL) vannak lefordítva, és a közös nyelvi futtatókörnyezetben (CLR) futnak. A JavaScriptben írt UWP-alkalmazások JavaScript futásidejű környezetben futnak. Maguk a Windows Futtatókörnyezet operációs rendszer összetevői C++ nyelven vannak megírva, és natív kódként futnak. Ezek az összetevők és UWP-alkalmazások közvetlenül kommunikálnak a Windows Futtatókörnyezet alkalmazás bináris felületén (ABI).

A Windows Futtatókörnyezet támogatásának modern C++ kifejezéssel való engedélyezéséhez a Microsoft létrehozta a C++/CX nyelvi bővítményt. A C++/CX beépített alaptípusokat és alapvető Windows-futtatókörnyezet-típusok implementációit biztosítja. Ezek a típusok lehetővé teszik, hogy a C++ alkalmazások és -összetevők más nyelveken írt alkalmazásokkal kommunikáljanak az ABI-ban. A C++/CX-alkalmazások bármilyen Windows-futtatókörnyezet-típust használhatnak. Emellett létrehozhatnak olyan osztályokat, szerkezeteket, interfészeket és más felhasználó által definiált típusokat is, amelyeket más UWP-alkalmazások és -összetevők felhasználhatnak. A C++/CX nyelven írt UWP-alkalmazások normál C++ osztályokat és szerkezeteket is használhatnak, amennyiben nem rendelkeznek nyilvános akadálymentességgel.

A C++/CX nyelvi vetítés részletes ismertetését és a borítók alatti működését az alábbi blogbejegyzésekben tekintheti meg:

Megjegyzés:

Bár a C++/CX továbbra is támogatott, javasoljuk, hogy helyette a C++/WinRT függvényt használja az új Windows-futtatókörnyezeti alkalmazásokhoz és -összetevőkhöz. Úgy tervezték, hogy első osztályú hozzáférést biztosítson a modern Windows API-hoz. A név ellenére a C++/WinRT csak standard C+++17-et használ bővítmények nélkül. Csak fejléces kódtárat használ a Windows Runtime API-khoz készült C++ nyelvi kivetítés implementálásához. A C++/WinRT a Windows SDK-ban az 1803-es verziótól (10.0.17134.0) érhető el.

Windows metaadatfájlok (.winmd)

A C++-ban írt UWP-alkalmazás fordításakor a fordító natív gépi kódban hozza létre a végrehajtható fájlt, és létrehoz egy külön Windows-metaadatfájlt (.winmd) is, amely tartalmazza a nyilvános Windows-futtatókörnyezet-típusok leírását, amelyek osztályokat, szerkezeteket, enumerálásokat, interfészeket, paraméteres interfészeket és meghatalmazottakat tartalmaznak. A metaadatok formátuma a .NET-keretrendszer szerelvényekben használt formátumhoz hasonlít. Egy C++ összetevőben a .winmd fájl csak metaadatokat tartalmaz, a végrehajtható kód pedig külön fájlban található. A Windows futtatókörnyezet összetevői ezt a megoldást használják. A .winmd fájlnévnek meg kell egyeznie a forráskód gyökérnévterének előtagjának vagy előtagjának. (A .NET-keretrendszer nyelveinél a .winmd fájl a kódot és a metaadatokat is tartalmazza, ugyanúgy, mint egy .NET-keretrendszer-szerelvényt.)

A fájl metaadatai a .winmd kód közzétett felületét jelölik. A közzétett típusok a többi UWP-alkalmazás számára is láthatók, függetlenül attól, hogy milyen nyelven vannak megírva a többi alkalmazás. A metaadatok vagy a közzétett kód csak a Windows Futtatókörnyezet típusrendszer által megadott típusokat tartalmazhat. Nem tehet közzé C++-specifikus nyelvi szerkezeteket, például normál osztályokat, tömböket, sablonokat vagy C++ Standard Könyvtár (STL) tárolókat. Egy JavaScript- vagy C#-ügyfélalkalmazás nem tudná, mi a teendő velük.

Attól függ, hogy egy típus vagy metódus látható-e a metaadatokban, attól függ, hogy a rendszer milyen akadálymentességi módosítókat alkalmaz rá. Ahhoz, hogy látható legyen, egy típust egy névtérben kell deklarálni, és deklarálni kell.public A kódban belső segédtípusként engedélyezett a nem-publicref class , csak nem látható a metaadatokban. Még egy public ref class, nem minden tag feltétlenül látható. Az alábbi táblázat a C++ hozzáférés-meghatározók public ref classés a Windows Futtatókörnyezet metaadatainak láthatósága közötti kapcsolatot sorolja fel:

Metaadatokban közzétéve Nem a metaadatokban van közzétéve
public private
protected internal
public protected private protected

Az Object Browser használatával megtekintheti a fájlok tartalmát .winmd . A windowsos futtatókörnyezet összetevői megtalálhatók a Windows.winmd fájlban. A default.winmd fájl tartalmazza a C++/CX fájlban használt alapvető típusokat, valamint platform.winmd a Platform névtérből származó típusokat. Alapértelmezés szerint ez a három .winmd fájl minden UWP-alkalmazás C++ projektjében szerepel.

Jótanács

A névtérben lévőPlatform::Collections típusok nem jelennek meg a .winmd fájlban, mert nem nyilvánosak. Ezek a -ben Windows::Foundation::Collectionsdefiniált interfészek privát C++-specifikus implementációi. A JavaScriptben vagy C# nyelven írt Windows Runtime-alkalmazások nem tudják, mi Platform::Collections::Vector az osztály , de felhasználhatnak egy Windows::Foundation::Collections::IVector. A Platform::Collections típusok a következőben vannak definiálva collection.h: .

Windows futtatókörnyezet típusú rendszer a C++/CX-ben

A következő szakaszok a Windows futtatókörnyezet típusú rendszer fő funkcióit és a C++/CX-ben támogatottak.

Namespaces

Minden Windows-futtatókörnyezet-típust névtéren belül kell deklarálni; maga a Windows API névtér szerint van rendszerezve. Egy .winmd fájlnak ugyanazzal a névvel kell rendelkeznie, mint a gyökérnévtérnek. Egy elnevezett A.B.C.MyClass osztály például csak akkor hozható létre, ha egy elnevezett metaadatfájlban van definiálva A.winmd, A.B.winmdvagy A.B.C.winmd. A DLL nevének nem kell egyeznie a .winmd fájlnévvel.

Magát a Windows API-t egy jól faktorált osztálytárként találták fel, amely névterek szerint van rendszerezve. A rendszer minden Windows-futtatókörnyezet-összetevőt deklarál a Windows.* névterekben.

További információ: Névterek és a típus láthatósága.

Alapvető típusok

A Windows futtatókörnyezet a következő alapvető típusokat határozza meg: UInt8, , Int16, UInt16Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean, és String. A C++/CX az alapértelmezett névtérben uint16a következő alapvető numerikus típusokat támogatja: , uint32, uint64, int16, int32, int64, float32float64és char16. Boolean és String a Platform névtérben is definiálva vannak.

A C++/CX a Windows futtatókörnyezetben nem támogatott, nyilvános API-kban nem használható – egyenértékű unsigned char– definíciókat is definiáluint8.

Egy alapvető típus null értékűvé tehető úgy, hogy egy Platform::IBox interfészbe burkolja. További információ: Értékosztályok és -szerkezetek.

Az alapvető típusokkal kapcsolatos további információkért lásd: Alapvető típusok

Húrok

A Windows futtatókörnyezeti sztringek 16 bites UNICODE-karakterek nem módosítható sorozatai. A Windows futtatókörnyezet sztringje a következő lesz Platform::String^: . Ez az osztály metódusokat biztosít a sztringek felépítéséhez, a manipulációhoz és a konvertáláshoz wchar_t.

További információ: Sztringek.

Tömbök

A Windows futtatókörnyezet bármilyen típusú egydimenziós tömböt támogat. A tömbök tömbjei nem támogatottak. A C++/CX rendszerben a windowsos futtatókörnyezeti tömbök lesznek osztálykéntPlatform::Array kivetítve.

További információ: Array és WriteOnlyArray.

ref class és ref struct típusok

A Windows futtatókörnyezeti osztály a C++/CX formátumban vagy típusként ref classref struct van kivetítve, mert hivatkozással másolták. A memóriakezelés és ref classref struct az objektumok kezelése transzparens módon történik a hivatkozásszámláláson keresztül. Amikor az objektumra mutató utolsó hivatkozás kiesik a hatókörből, az objektum megsemmisül. A ref class vagy ref struct típus a következő lehet:

  • Tagkonstruktorokat, metódusokat, tulajdonságokat és eseményeket tartalmaz. Ezek a tagok rendelkezhetnek public, privatevagy protectedinternal akadálymentességgel.

  • Tartalmazhat privát beágyazott enum, structvagy class definíciókat.

  • Közvetlenül örökölhet egy alaposztályt, és tetszőleges számú interfészt implementálhat. Minden ref class objektum implicit módon átalakítható az Platform::Object osztályra , és felülbírálhatja a virtuális metódusait– például Object::ToString.

A ref class nyilvános konstruktort úgy kell deklarálni sealed, hogy megakadályozza a további származtatást.

További információ: Ref osztályok és szerkezetek

value class és value struct típusok

Alapszintű value class adatstruktúrát jelöl, value struct és csak olyan mezőket tartalmaz, amelyek lehetnek value class típusok, value struct típusok vagy típusok Platform::String^. value struct és value class az objektumok érték szerint vannak másolva.

Az A-t value struct null értékűvé teheti úgy, hogy egy IBox illesztőbe burkolja.

További információ: Értékosztályok és -szerkezetek.

Részleges osztályok

A részleges osztályfunkció lehetővé teszi, hogy egy osztály több fájlon keresztül legyen definiálva. Lehetővé teszi a kódgenerálási eszközök, például az XAML-szerkesztő egy fájl módosítását anélkül, hogy egy másik szerkesztett fájlt érintenek.

További információ: Részleges osztályok

Tulajdonságok

A tulajdonság bármely Windows-futtatókörnyezet-típus nyilvános adattagja. A kulcsszóval deklarálva és definiálva property van. A tulajdonság metóduspárként get/set van implementálva. Az ügyfélkód úgy fér hozzá egy tulajdonsághoz, mintha nyilvános mező lenne. Az egyéni get vagy set kód nélküli tulajdonságot triviális tulajdonságnak nevezzük, és explicit get vagy set metódusok nélkül deklarálható.

További információ: Tulajdonságok.

Windows futtatókörnyezeti gyűjtemények a C++/CX-ben

A Windows futtatókörnyezet a gyűjteménytípusokhoz tartozó interfészeket határozza meg, amelyeket az egyes nyelvek a saját módján valósítanak meg. A C++/CX az osztályban, Platform::Collections::Map osztálybanPlatform::Collections::Vector és más kapcsolódó konkrét gyűjteménytípusokban biztosít implementációkat, amelyek kompatibilisek a C++ Standard Könyvtár megfelelőivel.

További információ: Gyűjtemények.

Sablontípusok ref class

private és internal a hozzáférési ref class típusok sablonosak és specializáltak lehetnek.

További információ: Template ref classes.

Felületek

A Windows futtatókörnyezeti felület olyan nyilvános tulajdonságokat, metódusokat és eseményeket határoz meg, amelyeket egy ref class vagy ref struct több típusnak implementálnia kell, ha az a felülettől öröklődik.

További információ: Interfészek.

Enumok

A enum class Windows futtatókörnyezet egyik típusa a C++-ban megadott enum hatókörhöz hasonlít. Az alapul szolgáló típus int32, kivéve, ha a [Flags] attribútumot alkalmazza – ebben az esetben az alapul szolgáló típus.uint32

További információ: Enums.

Delegáltak

A Windows Futtatókörnyezetben lévő meghatalmazottak hasonlóak a std::function C++-ban lévő objektumhoz. Ez egy speciális ref class típus, amely kompatibilis aláírásokkal rendelkező ügyfél által biztosított függvények meghívására szolgál. A meghatalmazottakat leggyakrabban a Windows futtatókörnyezetben használják az esemény típusaként.

További információ: Meghatalmazottak.

Kivételek

A C++/CX-ben egyéni kivételtípusokat, std::exception típusokat és Platform::Exception típusokat foghat.

További információ: Kivételek.

Események

Az esemény egy nyilvános tag egy ref class meghatalmazotti típusban, vagy ref struct amelynek típusa delegált típusú. Egy eseményt csak a tulajdonos osztály hívhat meg , vagyis aktiválhat. Az ügyfélkód azonban képes saját eseménykezelő függvényeket biztosítani, amelyeket a tulajdonos osztály az esemény indításakor hív meg.

További információ: Események.

Szereplőválogatás

A C++/CX támogatja a standard C++ öntött operátorokat static_cast, dynamic_castés reinterpret_casta safe_cast C++/CX-hez tartozó operátort is.

További információ: Casting.

Ökölvívás

A dobozos változó egy hivatkozástípusba burkolt értéktípus. Használjon dobozos változókat olyan helyzetekben, amikor referencia-szemantikára van szükség.

További információ: Boxing.

Tulajdonságok

Az attribútum egy metaadat-érték, amely bármely Windows-futtatókörnyezet-típusra vagy típustagra alkalmazható. Az attribútumok futtatáskor vizsgálhatók. A Windows futtatókörnyezet a névtérben Windows::Foundation::Metadata gyakran használt attribútumokat határoz meg. A windowsos futtatókörnyezet ebben a kiadásban nem támogatja a nyilvános felületeken a felhasználó által definiált attribútumokat.

API-elavulás

A nyilvános API-kat elavultként megjelölheti ugyanazzal az attribútummal, amelyet a Windows Futtatókörnyezet rendszertípusai használnak.

További információ: Elavult típusok és tagok.

Lásd még

C++/CX nyelvi referencia