Systém typů (C++/CX)

pomocí architektury prostředí Windows Runtime můžete použít C++/cx, Visual Basic, Visual C# a JavaScript k psaní aplikací a komponent, které přímo přistupují k rozhraní API Windows a spolupracuje s dalšími prostředí Windows Runtime aplikacemi a komponentami. Univerzální platforma Windows aplikace napsané v jazyce C++ zkompiluje do nativního kódu, který se spouští přímo v procesoru. Univerzální platforma Windows aplikace, které jsou napsány v jazyce C# nebo Visual Basic kompilovány do jazyka MSIL (Microsoft intermediate language) a spouštěny v modulu clr (common language runtime). Univerzální platforma Windows aplikace, které jsou napsané v javascriptu, se spustí v běhovém prostředí. součásti operačního systému prostředí Windows Runtime samotné jsou napsány v jazyce C++ a spouštěny jako nativní kód. všechny tyto komponenty a aplikace Univerzální platforma Windows komunikují přímo prostřednictvím binárního rozhraní aplikace prostředí Windows Runtime (ABI).

aby bylo možné povolit podporu prostředí Windows Runtime v moderních idiom c++, společnost Microsoft vytvořila c++/CX.. C++/cx poskytuje integrované základní typy a implementace základních prostředí Windows Runtime typů, které umožňují aplikacím a komponentám C++ komunikovat přes ABI pomocí aplikací, které jsou napsané v jiných jazycích. můžete využívat libovolný typ prostředí Windows Runtime nebo vytvořit třídy, struktury, rozhraní a další uživatelsky definované typy, které mohou být spotřebovány jinými Univerzální platforma Windows aplikacemi a komponentami. Univerzální platforma Windows aplikace napsaná v jazyce C++/cx může také používat regulární třídy a struktury jazyka c++, pokud nemají veřejné přístupnost.

Podrobné informace o projekci jazyka C++/CX a o tom, jak funguje pod jednotlivými vazbami, najdete v těchto blogových příspěvcích:

soubory Windows metadat (. winmd)

při kompilaci Univerzální platforma Windows aplikace napsané v jazyce C++ kompilátor vygeneruje spustitelný soubor v nativním strojovém kódu a také vygeneruje samostatný soubor metadat Windows (. winmd), který obsahuje popisy typů veřejných prostředí Windows Runtime, které zahrnují třídy, struktury, výčty, rozhraní, parametrizovaná rozhraní a delegáty. formát metadat se podobá formátu, který se používá v .NET Framework sestaveních. V komponentě C++ obsahuje soubor. winmd pouze metadata; spustitelný kód se nachází v samostatném souboru. v tomto případě prostředí Windows Runtime součásti, které jsou součástí Windows. Název souboru WinMD musí odpovídat nebo být prefixem kořenového oboru názvů ve zdrojovém kódu. (pro .NET Framework jazyky obsahuje soubor. winmd jak kód, tak metadata, stejně jako sestavení .NET Framework.)

Metadata v souboru winmd představují publikovaný povrch kódu. publikované typy jsou viditelné na jiných platformách Universal Windows bez ohledu na to, v jakém jazyce jsou tyto jiné aplikace napsané. proto metadata nebo publikovaný kód mohou obsahovat pouze typy určené systémem typu prostředí Windows Runtime. Jazykové konstrukce, které jsou specifické pro jazyk C++, jako jsou například regulární třídy, pole, šablony nebo kontejnery STL, nelze publikovat v metadatech, protože klientská aplikace jazyka JavaScript nebo C# by nevěděla, co s nimi dělat.

Zda je typ nebo metoda viditelná v metadatech, závisí na tom, jaké Modifikátory dostupnosti jsou pro něj použity. Aby bylo možné zobrazit typ, musí být deklarován v oboru názvů a musí být deklarován jako Public. Neveřejná referenční třída je povolena jako interní typ pomocné rutiny v kódu; v metadatech se jen nezobrazí. I ve veřejné referenční třídě nejsou všechny členy nutně viditelné. v následující tabulce je uveden vztah mezi specifikátory přístupu C++ ve veřejné referenční třídě a prostředí Windows Runtime viditelnost metadat:

Publikováno v metadatech Nepublikováno v metadatech
public private
protected internal
chráněno jako veřejné private protected

Můžete použít Prohlížeč objektů k zobrazení obsahu souborů. winmd. prostředí Windows Runtime součásti, které jsou součástí Windows, jsou v souboru Windows. winmd. Výchozí soubor. winmd obsahuje základní typy, které se používají v C++/CX, a Platform. winmd obsahuje další typy z oboru názvů platformy. ve výchozím nastavení jsou tyto tři soubory. winmd zahrnuty v každém projektu C++ pro aplikace Univerzální platforma Windows.

Tip

Typy v oboru názvů Platform:: Collections se nezobrazí v souboru WinMD, protože nejsou veřejné. Jsou to soukromé implementace jazyka C++ specifické pro rozhraní, které jsou definovány v Windows::Foundation::Collections . prostředí Windows Runtime aplikace, která je napsána v jazyce JavaScript nebo C#, neví, co je třída Platform:: collections:: Vector , ale může spotřebovat . Platform::CollectionsTypy jsou definovány v Collection. h.

systém typů prostředí Windows Runtime v C++/cx

v následujících částech jsou popsány hlavní funkce systému prostředí Windows Runtime typů a jejich podpora v jazyce C++/CX.

Obory názvů

všechny typy prostředí Windows Runtime musí být deklarovány v rámci oboru názvů. rozhraní API Windows samotné je uspořádáno podle oborů názvů. Soubor. winmd musí mít stejný název, který má kořenový obor názvů. Například třída s názvem A. B. C. MyClass může být vytvořena 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 knihovny DLL není nutné odpovídat názvu souboru. winmd.

rozhraní API pro Windows samotné bylo reinvented jako knihovna tříd, která je uspořádána podle oborů názvů. všechny součásti prostředí Windows Runtime jsou deklarovány v oborech názvů Windows. *.

Další informace naleznete v části obory názvů a viditelnost typů.

Základní typy

prostředí Windows Runtime definuje následující základní typy, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean a String. C++/CX podporuje základní číselné typy ve svém výchozím oboru názvů jako UInt16, UInt32, UInt64, Int16, Int32, Int64, float32, float64 a Char16. Logická hodnota a řetězec jsou také definovány v oboru názvů platformy.

C++/cx také definuje uint8, unsigned char který je ekvivalentní k, což není v prostředí Windows Runtime podporováno a nelze ho použít ve veřejných rozhraních api.

Základní typ může mít hodnotu null, protože ho zabalíte v rozhraní rozhraní Platform:: iBox . Další informace naleznete v tématu třídy a struktury hodnot.

Další informace o základních typech najdete v tématu základní typy .

Řetězce

prostředí Windows Runtime řetězec je neproměnlivá sekvence 16bitových znaků UNICODE. prostředí Windows Runtime řetězec je projekt jako Platform::String^ . Tato třída poskytuje metody pro vytváření řetězců, manipulaci a převod na a z wchar_t .

Další informace najdete v tématu řetězce.

Pole

prostředí Windows Runtime podporuje jednorozměrné pole libovolného typu. Pole polí nejsou podporována. v jazyce C++/cx prostředí Windows Runtime pole jsou považována za třídu Platform:: Array.

Další informace najdete v tématech Array a WriteOnlyArray .

Referenční třídy a struktury

prostředí Windows Runtime třída je probíhají v jazyce C++/cx jako ref class nebo ref struct, protože jsou zkopírovány odkazem. Správa paměti pro referenční třídy a struktury ref jsou transparentně zpracovávány prostřednictvím počítání odkazů. Když se poslední odkaz na objekt přestane vyřadit z rozsahu, objekt je zničen. Struktura ref class nebo ref může:

  • Obsahují jako členy konstruktory, metody, vlastnosti a události. Tito členové mohou mít veřejné, privátní, chráněné nebo interní přístupnost.

  • Může obsahovat definice privátního vnořeného výčtu, struktury nebo třídy.

  • Může přímo dědit z jedné základní třídy a může implementovat libovolný počet rozhraní. Všechny třídy ref jsou implicitně převoditelné na třídu Platform:: Object a mohou přepsat své virtuální metody, například Object:: ToString.

Třída ref class, která má veřejný konstruktor, musí být deklarována jako zapečetěná, aby se zabránilo dalšímu odvození.

Další informace naleznete v tématu ref Classes and Structs

Hodnotové třídy a struktury

Struktura hodnot nebo hodnot představuje základní strukturu dat a obsahuje pouze pole, která mohou být třídy hodnot, struktury hodnot nebo typ Platform::String^ . Struktury hodnot a třídy hodnot se zkopírují podle hodnoty.

Pomocí zabalení v rozhraní IBox může být vytvořena struktura hodnot s možnou hodnotou null.

Další informace naleznete v tématu třídy a struktury hodnot.

Dílčí třídy

Funkce částečné třídy umožňuje definovat jednu třídu v rámci více souborů. Používá se hlavně pro povolení nástrojů pro generování kódu, jako je Editor XAML, pro úpravu jednoho souboru bez zásahu do souboru, který upravujete.

Další informace najdete v části Částečné třídy.

Vlastnosti

Vlastnost je veřejný datový člen libovolného typu Windows Runtime a je implementována jako pár metod get/set. Klientský kód přistupuje k vlastnosti, jako by se jedná o veřejné pole. Vlastnost, která nevyžaduje žádný vlastní kód get nebo set, se označuje jako triviální vlastnost a lze ji deklarovat bez explicitních metod get nebo set.

Další informace najdete v tématu Vlastnosti.

Windows Runtime v C++/CX

Modul Windows Runtime definuje sadu rozhraní pro typy kolekcí, které každý jazyk implementuje vlastním způsobem. C++/CX poskytuje implementace ve třídě Platform::Collections::Vector,Platform::Collections::Map adalších souvisejících konkrétních typech kolekcí, které jsou kompatibilní s jejich protějšky standardní knihovny šablon (STL).

Další informace najdete v tématu Kolekce.

Šablony referenčních tříd

Soukromé a interní referenční třídy lze šablonovat a specializovat.

Další informace najdete v tématu Šablony referenčních tříd.

Rozhraní

Rozhraní Windows Runtime definuje sadu veřejných vlastností, metod a událostí, které musí třída ref nebo struktura ref implementovat, pokud dědí z rozhraní.

Další informace najdete v tématu Rozhraní.

Výčty

Třída výčtu v Windows Runtime se podobá vymezené výčtu v jazyce C++. Základní typ je int32, pokud není použit atribut [Flags] – v takovém případě je podkladový typ uint32.

Další informace najdete v tématu Výčty.

Delegáti

Delegát v modulu Windows Runtime je obdobou objektu std::function v jazyce C++. Je to zvláštní druh třídy ref, který se používá k vyvolání funkcí poskytovaných klientem, které mají kompatibilní podpisy. Delegáti se nejčastěji používají v Windows Runtime jako typ události.

Další informace najdete v tématu Delegáti.

Výjimky

V jazyce C++/CX můžete zachytit vlastní typy výjimek, typy std::exception a typy Platform::Exception.

Další informace najdete v tématu Výjimky.

Události

Událost je veřejný člen ve třídě ref nebo struktury ref, jejíž typ je typu delegátu. Událost je možné vyvolat pouze vlastnící třídou, to znamená, že je aktivována. Kód klienta však může poskytovat své vlastní funkce, které se označuje jako obslužné rutiny událostí a jsou vyvolány, když vlastnící třída vyvolá událost.

Další informace najdete v tématu Události.

Přetypování

C++/CX podporuje standardní operátory přetypování C++ static_cast, dynamic_casta reinterpret_casta také operátor safe_cast specifický pro C++/CX.

Další informace najdete v tématu Přetypování.

Zabalení

Zabalená proměnná je hodnotový typ, který je zabalený do typu odkazu v situacích, kdy je vyžadována sémantika odkazu.

Další informace najdete v tématu Boxing.

Atributy

Atribut je hodnota metadat, kterou lze použít pro libovolný typ Windows runtime nebo člen typu a lze ji zkontrolovat za běhu. Modul Windows Runtime definuje sadu běžných atributů v oboru Windows::Foundation::Metadata názvů . Uživatelem definované atributy ve veřejných rozhraních nejsou podporovány Windows Runtime v této verzi.

Vyněcování rozhraní API

Popisuje, jak označit veřejná rozhraní API jako zastaralá pomocí stejného atributu, který používá systém Windows Runtime.

Další informace najdete v tématu Vynění typů a členů.

Viz také

Referenční dokumentace jazyka C++/CX