Přípony komponent pro .NET a UPW
Standard C++ umožňuje dodavatelům kompilátoru poskytovat nestandardní rozšíření jazyka. Microsoft poskytuje rozšíření, která vám pomůžou připojit nativní kód C++ k kódu, který běží v rozhraní .NET Framework nebo Univerzální platforma Windows (UPW). Rozšíření .NET se nazývají C++/CLI a vytvářejí kód, který se spouští ve spravovaném spouštěcím prostředí .NET, které se nazývá clr (Common Language Runtime). Rozšíření UPW se nazývají C++/CX a vytvářejí nativní strojový kód.
Poznámka:
Pro nové aplikace doporučujeme místo C++/CX používat C++/WinRT. C++/WinRT je nová standardní projekce jazyka C++17 pro prostředí Windows Runtime rozhraní API. Budeme dál podporovat C++/CX a WRL, ale důrazně doporučujeme, aby nové aplikace používaly C++/WinRT. Další informace najdete v tématu C++/WinRT.
Dva moduly runtime, jedna sada rozšíření
C++/CLI rozšiřuje standard ISO/ANSI C++ a je definován v rámci standardu Ecma C++/CLI. Další informace najdete v tématu Programování v .NET pomocí C++/CLI (Visual C++).
Rozšíření C++/CX jsou podmnožinou C++/CLI. I když je syntaxe rozšíření ve většině případů stejná, kód, který se vygeneruje, závisí na tom, jestli zadáte možnost kompilátoru /ZW
pro cílový UPW, nebo /clr
možnost pro cílení na .NET. Tyto přepínače se nastaví automaticky při vytváření projektu pomocí sady Visual Studio.
Klíčová slova datového typu
Mezi jazyková rozšíření patří agregovaná klíčová slova, která se skládají ze dvou tokenů oddělených prázdným znakem. Tokeny můžou mít jeden význam, když se používají samostatně, a další význam, když se používají společně. Například slovo "odkaz" je běžný identifikátor a slovo "třída" je klíčové slovo, které deklaruje nativní třídu. Pokud jsou však tato slova sloučena do třídy ref, výsledné agregační klíčové slovo deklaruje entitu, která je známá jako třída modulu runtime.
Rozšíření také obsahují klíčová slova citlivá na kontext. Klíčové slovo se považuje za kontextově citlivé v závislosti na druhu příkazu, který ho obsahuje, a jeho umístění v tomto příkazu. Token "property" může být například identifikátor nebo může deklarovat zvláštní druh člena veřejné třídy.
Následující tabulka uvádí klíčová slova v rozšíření jazyka C++.
Klíčové slovo | Kontextově | Účel | Reference |
---|---|---|---|
ref – třída ref – struktura |
No | Deklaruje třídu. | Třídy a struktury |
value – třída value – struktura |
No | Deklaruje třídu hodnot. | Třídy a struktury |
interface class interface – struktura |
No | Deklaruje rozhraní. | interface class |
enum class enum – struktura |
No | Deklaruje výčet. | enum class |
property |
Ano | Deklaruje vlastnost. | vlastnost |
delegate | Ano | Deklaruje delegáta. | delegate (C++/CLI a C++/CX) |
event | Ano | Deklaruje událost. | event |
override – specifikátory
K kvalifikaci chování přepsání pro odvození můžete použít následující klíčová slova. new
I když klíčové slovo není rozšířením jazyka C++, je zde uvedeno, protože ho lze použít v dalším kontextu. Některé specifikátory jsou také platné pro nativní programování. Další informace naleznete v tématu Postupy: Deklarace specifikátorů přepsání v nativních kompilacích (C++/CLI).
Klíčové slovo | Kontextově | Účel | Reference |
---|---|---|---|
abstract | Ano | Označuje, že funkce nebo třídy jsou abstraktní. | abstract |
new |
No | Označuje, že funkce není přepsání verze základní třídy. | new (nový slot v tabulce vtable) |
override | Ano | Označuje, že metoda musí být přepsání verze základní třídy. | override |
sealed | Ano | Zabraňuje tomu, aby se třídy používaly jako základní třídy. | sealed |
Klíčová slova pro obecné typy
Pro podporu obecných typů jsme přidali následující klíčová slova. Další informace najdete v tématu Obecné typy.
Klíčové slovo | Kontextově | Účel |
---|---|---|
generický | No | Deklaruje obecný typ. |
kde | Ano | Určuje omezení použitá u parametru obecného typu. |
Různá klíčová slova
Do rozšíření jazyka C++ byly přidána následující klíčová slova.
Klíčové slovo | Kontextově | Účel | Reference |
---|---|---|---|
finally | Ano | Označuje výchozí chování zpracování výjimek. | Zpracování výjimek |
for each, in | No | Vytvoří výčet prvků kolekce. | for each, in |
gcnew | No | Přiděluje typy haldy shromážděné na paměti. Používejte místo new a delete . |
ref new, gcnew |
ref new | Ano | Přidělí typ prostředí Windows Runtime. Používejte místo new a delete . |
ref new, gcnew |
initonly | Ano | Označuje, že člen lze inicializovat pouze při deklaraci nebo ve statickém konstruktoru. | initonly (C++/CLI) |
literal | Ano | Vytvoří literálovou proměnnou. | literal |
nullptr |
No | Označuje, že úchyt nebo ukazatel neukazuje na objekt. | nullptr |
Konstrukty šablon
Následující jazykové konstrukce se implementují jako šablony místo jako klíčová slova. Pokud zadáte možnost kompilátoru /ZW
, jsou definovány v lang
oboru názvů. Pokud zadáte možnost kompilátoru /clr
, jsou definovány v cli
oboru názvů.
Klíčové slovo | Účel | Reference |
---|---|---|
pole | Deklaruje pole. | Pole |
interior_ptr | (pouze CLR) Odkazuje na data v referenčním typu. | interior_ptr (C++/CLI) |
pin_ptr | (pouze CLR) Odkazuje na odkazové typy CLR, které dočasně potlačí systém uvolňování paměti. | pin_ptr (C++/CLI) |
safe_cast | Určuje a spustí optimální metodu přetypování pro typ modulu runtime. | safe_cast |
typeid |
(pouze CLR) Načte System.Type objekt, který popisuje daný typ nebo objekt. | typeid |
Deklarátory
Následující deklarátory typu instruují modul runtime, aby automaticky spravoval dobu životnosti a odstranění přidělených objektů.
Operátor | Účel | Reference |
---|---|---|
^ |
Deklaruje popisovač objektu; to znamená, že ukazatel na objekt prostředí Windows Runtime nebo CLR, který se automaticky odstraní, když už není použitelný. | Operátor popisovače objektu (^) |
% |
Deklaruje sledovací odkaz; to znamená odkaz na objekt prostředí Windows Runtime nebo CLR, který se automaticky odstraní, když už není použitelný. | Operátor sledovacího odkazu |
Další konstrukty a související témata
Tato část obsahuje seznam dalších programovacích konstruktorů a témat týkajících se CLR.
Téma | Popis |
---|---|
__identifier (C++/CLI) | (prostředí Windows Runtime a CLR) Umožňuje používat klíčová slova jako identifikátory. |
Seznamy argumentů s proměnnou délkou (...) (C++/CLI) | (prostředí Windows Runtime a CLR) Umožňuje funkci vzít proměnný počet argumentů. |
.NET Framework – ekvivalenty nativních typů C++ (C++/CLI) | Uvádí typy CLR, které se používají místo integrálních typů C++. |
modifikátor appdomain __declspec |
__declspec modifikátor, který vyžaduje, aby pro každou doménu aplikace existovaly statické a globální proměnné. |
Přetypování ve stylu jazyka C pomocí /clr (C++/CLI) | Popisuje, jak se interpretují přetypování ve stylu jazyka C. |
__clrcall konvence volání | Označuje konvenci volání odpovídající CLR. |
__cplusplus_cli |
Předdefinovaná makra |
Vlastní atributy | Popisuje, jak definovat vlastní atributy CLR. |
Zpracování výjimek | Poskytuje přehled zpracování výjimek. |
Explicitní přepsání | Ukazuje, jak členské funkce mohou přepsat libovolné členy. |
Přátelská sestavení (C++) | Popisuje, jak klientské sestavení má přístup ke všem typům v komponentě sestavení. |
Zabalení | Demonstruje podmínky, ve kterých jsou typy hodnot v rámečku. |
Podpora kompilátoru pro typové vlastnosti | Popisuje, jak detekovat charakteristiky typů v době kompilace. |
spravované, nespravované pragmy | Demonstruje, jak spravované a nespravované funkce můžou existovat společně ve stejném modulu. |
modifikátor procesu __declspec |
__declspec modifikátor, který vyžaduje, aby pro proces existovaly statické a globální proměnné. |
Reflexe (C++/CLI) | Demonstruje verzi CLR informací o typu runtime. |
Řetězec | Popisuje převod řetězcových literálů na Stringkompilátor . |
Předávání typů (C++/CLI) | Umožňuje přesun typu v expedičním sestavení do jiného sestavení, aby klientský kód nemusel být rekompilován. |
Uživatelsky definované atributy | Demonstruje uživatelem definované atributy. |
#using – direktiva | Importuje externí sestavení. |
Dokumentace XML | Vysvětluje dokumentaci kódu založenou na jazyce XML pomocí /doc (process documentation comments) (C/C++). |
Viz také
Programování pro .NET v jazyce C++/CLI (Visual C++)
Nativní funkce a vzájemná funkční spolupráce rozhraní .NET