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

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