.NET および UWP 用のコンポーネントの拡張機能Component Extensions for .NET and UWP

C++ 標準では、コンパイラ ベンダーがその言語に対して非標準の拡張機能を提供できます。The C++ standard allows compiler vendors to provide non-standard extensions to the language. Microsoft では、ネイティブ C++ コードを .NET Framework またはユニバーサル Windows プラットフォーム (UWP) 上で実行されるコードに接続するために役立つ拡張機能を提供しています。Microsoft provides extensions to help you connect native C++ code to code that runs on the .NET Framework or the Universal Windows Platform (UWP). .NET 拡張機能は C++/CLI と呼ばれ、共通言語ランタイム (CLR) と呼ばれる .NET マネージド実行環境で実行されるコードを生成します。The .NET extensions are called C++/CLI and produce code that executes in the .NET managed execution environment that is called the Common Language Runtime (CLR). UWP 拡張機能は C++/CX と呼ばれ、ネイティブ マシン コードを生成します。The UWP extensions are called C++/CX and they produce native machine code.


新しいアプリケーションでは、C++/CX ではなく C++/WinRT を使用することをお勧めします。For new applications, we recommend using C++/WinRT rather than C++/CX. C++/WinRT は、Windows ランタイム API 用の新しい標準的な C++17 言語プロジェクションです。C++/WinRT is a new, standard C++17 language projection for Windows Runtime APIs. C++/CX と WRL は引き続きサポートされますが、新しいアプリケーションでは C++/WinRT を使用することを強くお勧めします。We will continue to support C++/CX and WRL, but highly recommend that new applications use C++/WinRT. 詳細については、「C++/WinRT」を参照してください。For more information, see C++/WinRT.

2 つのランタイムに共通の拡張Two runtimes, one set of extensions

C++/CLI は ISO/ANSI C++ 規格を拡張したものであり、Ecma C++/CLI 規格で定義されています。C++/CLI extends the ISO/ANSI C++ standard, and is defined under the Ecma C++/CLI Standard. 詳細については、「C++/CLI による .NET プログラミング (Visual C++)」を参照してください。For more information, see .NET Programming with C++/CLI (Visual C++).

C++/CX 拡張機能は、C++/CLI のサブセットです。The C++/CX extensions are a subset of C++/CLI. 拡張構文はほとんどの場合は同じですが、生成されるコードは、UWP をターゲットする /ZW コンパイラ オプションまたは .NET をターゲットとする /clr オプションの指定に応じて異なります。Although the extension syntax is identical in most cases, the code that is generated depends on whether you specify the /ZW compiler option to target UWP, or the /clr option to target .NET. Visual Studio を使用してプロジェクトを作成すると、これらのスイッチが自動的に設定されます。These switches are set automatically when you use Visual Studio to create a project.

データ型のキーワードData Type Keywords

これらの言語拡張には、空白で区切られた 2 つのトークンで構成される "集計キーワード" が含まれています。The language extensions include aggregate keywords, which consist of two tokens separated by white space. これらのトークンは、単独で使用した場合と一緒に使用した場合で意味が異なることがあります。The tokens might have one meaning when they are used separately, and another meaning when they are used together. たとえば、"ref" は通常の識別子であり、"class" はネイティブ クラスを宣言するキーワードです。For example, the word "ref" is an ordinary identifier, and the word "class" is a keyword that declares a native class. しかし、これらを組み合わせて ref class として使用した場合は、"ランタイム クラス" と呼ばれるエンティティを宣言する集計キーワードになります。But when these words are combined to form ref class, the resulting aggregate keyword declares an entity that is known as a runtime class.

これらの拡張機能には、"状況依存キーワード" も含まれています。The extensions also include context-sensitive keywords. キーワードが状況依存のキーワードとして扱われるかどうかは、キーワードを含むステートメントの種類と、そのステートメント内でのキーワードの配置で決まります。A keyword is treated as context-sensitive depending on the kind of statement that contains it, and its placement in that statement. たとえば、"property" というトークンは、識別子として使用されることもあれば、特殊なパブリック クラスのメンバーを宣言するために使用されることもあります。For example, the token "property" can be an identifier, or it can declare a special kind of public class member.

次の表に、C++ 言語拡張のキーワードの一覧を示します。The following table lists keywords in the C++ language extension.

キーワードKeyword 状況依存Context sensitive 目的Purpose 関連項目Reference
ref classref class

ref structref struct
いいえNo クラスを宣言します。Declares a class. クラスと構造体Classes and Structs
value classvalue class

value structvalue struct
いいえNo 値クラスを宣言します。Declares a value class. クラスと構造体Classes and Structs
interface classinterface class

interface structinterface struct
いいえNo インターフェイスを宣言します。Declares an interface. interface classinterface class
enum classenum class

enum structenum struct
いいえNo 列挙型を宣言します。Declares an enumeration. enum classenum class
propertyproperty はいYes プロパティを宣言します。Declares a property. プロパティproperty
delegatedelegate はいYes デリゲートを宣言します。Declares a delegate. delegate (C++/CLI および C++/CX)delegate (C++/CLI and C++/CX)
eventevent はいYes イベントを宣言します。Declares an event. eventevent

オーバーライド指定子Override Specifiers

次のキーワードは、派生のオーバーライド動作を修飾するために使用できます。You can use the following keywords to qualify override behavior for derivation. new キーワードは C++ の拡張機能ではありませんが、追加のコンテキストで使用できるキーワードとしてこの一覧に含めてあります。Although the new keyword is not an extension of C++, it is listed here because it can be used in an additional context. 一部の指定子は、ネイティブのプログラミングに対しても有効です。Some specifiers are also valid for native programming. 詳細については、「方法 :ネイティブ コンパイルでオーバーライド指定子を宣言する (C++/CLI)」を参照してください。For more information, see How to: Declare Override Specifiers in Native Compilations (C++/CLI).

キーワードKeyword 状況依存Context Sensitive 目的Purpose 関連項目Reference
abstractabstract はいYes 関数またはクラスが抽象型であることを示します。Indicates that functions or classes are abstract. abstractabstract
newnew いいえNo 関数が基底クラスのバージョンのオーバーライドでないことを示します。Indicates that a function is not an override of a base class version. new (vtable の新しいスロット)new (new slot in vtable)
overrideoverride はいYes メソッドが基底クラスのバージョンのオーバーライドでなければならないことを示します。Indicates that a method must be an override of a base-class version. overrideoverride
sealedsealed はいYes クラスを基底クラスとして使用しないことを示します。Prevents classes from being used as base classes. sealedsealed

ジェネリックのキーワードKeywords for Generics

ジェネリック型をサポートするために追加されたキーワードを次に示します。The following keywords have been added to support generic types. 詳細については、「ジェネリック」を参照してください。For more information, see Generics.

キーワードKeyword 状況依存Context sensitive 目的Purpose
genericgeneric いいえNo ジェネリック型を宣言します。Declares a generic type.
wherewhere はいYes ジェネリック型パラメーターに適用される制約を指定します。Specifies the constraints that are applied to a generic type parameter.

その他のキーワードMiscellaneous Keywords

C++ 拡張に追加されたその他のキーワードを次に示します。The following keywords have been added to the C++ extensions.

キーワードKeyword 状況依存Context sensitive 目的Purpose 関連項目Reference
finallyfinally はいYes 例外処理の既定の動作を示します。Indicates default exception handlings behavior. 例外処理Exception Handling
for each、infor each, in いいえNo コレクションの要素を列挙します。Enumerates elements of a collection. for each、infor each, in
gcnewgcnew いいえNo ガベージ コレクション ヒープに型を割り当てます。Allocates types on the garbage-collected heap. newdelete の代わりに使用します。Use instead of new and delete. ref new、gcnewref new, gcnew
ref newref new はいYes Windows ランタイム型を割り当てます。Allocates a Windows Runtime type. newdelete の代わりに使用します。Use instead of new and delete. ref new、gcnewref new, gcnew
initonlyinitonly はいYes 宣言または静的コンストラクターでしかメンバーを初期化できないことを示します。Indicates that a member can only be initialized at declaration or in a static constructor. initonly (C++/CLI)initonly (C++/CLI)
nameliteral はいYes リテラル変数を作成します。Creates a literal variable. nameliteral
nullptrnullptr いいえNo ハンドルまたはポインターでオブジェクトを参照しないことを示します。Indicates that a handle or pointer does not point at an object. nullptrnullptr

テンプレートの構成要素Template Constructs

次の言語構成要素は、キーワードとしてではなく、テンプレートとして実装されています。The following language constructs are implemented as templates, instead of as keywords. /ZW コンパイラ オプションを指定した場合は lang 名前空間で定義され、If you specify the /ZW compiler option, they are defined in the lang namespace. /clr コンパイラ オプションを指定した場合は cli 名前空間で定義され、If you specify the /clr compiler option, they are defined in the cli namespace.

キーワードKeyword 目的Purpose 関連項目Reference
arrayarray 配列を宣言します。Declares an array. 配列Arrays
interior_ptrinterior_ptr (CLR のみ) 参照型でデータを参照します。(CLR only) Points to data in a reference type. interior_ptr (C++/CLI)interior_ptr (C++/CLI)
pin_ptrpin_ptr (CLR のみ) CLR 参照型を参照して、ガベージ コレクション システムを一時的に無効にします。(CLR only) Points to CLR reference types to temporarily suppress the garbage-collection system. pin_ptr (C++/CLI)pin_ptr (C++/CLI)
safe_castsafe_cast ランタイム型の最適なキャスト方法を特定して実行します。Determines and executes the optimal casting method for a runtime type. safe_castsafe_cast
typeidtypeid (CLR のみ) 指定した型またはオブジェクトを表す System.Type オブジェクトを取得します。(CLR only) Retrieves a System.Type object that describes the given type or object. typeidtypeid


割り当てられたオブジェクトの有効期間と削除をランタイムで自動的に管理するように指定する型の宣言子を次に示します。The following type declarators instruct the runtime to automatically manage the lifetime and deletion of allocated objects.

演算子Operator 目的Purpose 関連項目Reference
^ オブジェクトを識別するハンドル (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへのポインター) を宣言します。Declares a handle to an object; that is, a pointer to a Windows Runtime or CLR object that is automatically deleted when it is no longer usable. オブジェクト演算子 (^) へのハンドルHandle to Object Operator (^)
% 追跡参照 (使用できなくなったときに自動的に削除される Windows ランタイム オブジェクトまたは CLR オブジェクトへの参照) を宣言します。Declares a tracking reference; that is, a reference to a Windows Runtime or CLR object that is automatically deleted when it is no longer usable. 参照演算子の追跡Tracking Reference Operator

ここでは、その他のプログラミング構成要素と CLR の関連トピックを示します。This section lists additional programming constructs, and topics that pertain to the CLR.

トピックTopic 説明Description
__identifier (C++/CLI)__identifier (C++/CLI) (Windows ランタイムおよび CLR) キーワードを識別子として使用できるようにします。(Windows Runtime and CLR) Enables the use of keywords as identifiers.
可変個引数リスト (...) (C++/CLI)Variable Argument Lists (...) (C++/CLI) (Windows ランタイムおよび CLR) 関数で受け取ることができる引数の数を可変にします。(Windows Runtime and CLR) Enables a function to take a variable number of arguments.
C++ ネイティブ型と等価な .NET Framework ネイティブ型 (C++/CLI).NET Framework Equivalents to C++ Native Types (C++/CLI) C++ の整数型の代わりに使用される CLR 型を示します。Lists the CLR types that are used in place of C++ integral types.
appdomain __declspec 修飾子appdomain __declspec modifier __declspec 修飾子は、appdomain ごとに静的変数とグローバル変数を必須にする修飾子です。__declspec modifier that mandates that static and global variables exist per appdomain.
C スタイル キャストと /clr (C++/CLI)C-Style Casts with /clr (C++/CLI) C スタイル キャストがどのように解釈されるかについて説明します。Describes how C-style casts are interpreted.
__clrcall 呼び出し規則__clrcall calling convention CLR 準拠の呼び出し規則を示します。Indicates the CLR-compliant calling convention.
__cplusplus_cli 定義済みマクロPredefined Macros
カスタム属性Custom Attributes 独自の CLR 属性を定義する方法について説明します。Describes how to define your own CLR attributes.
例外処理Exception Handling 例外処理の概要を示します。Provides an overview of exception handling.
明示的なオーバーライドExplicit Overrides メンバー関数で任意のメンバーをオーバーライドする方法を示します。Demonstrates how member functions can override arbitrary members.
フレンド アセンブリ (C++)Friend Assemblies (C++) クライアント アセンブリでアセンブリ コンポーネントのすべての型にアクセスする方法について説明します。Discusses how a client assembly can access all types in an assembly component.
ボックス化Boxing 値型がボックス化される条件を示します。Demonstrates the conditions in which values types are boxed.
型の特徴のコンパイラ サポートCompiler Support for Type Traits コンパイル時に型の特性を検出する方法について説明します。Discusses how to detect characteristics of types at compile time.
マネージド、アンマネージド プラグマmanaged, unmanaged pragmas 同じモジュールにマネージド 関数とアンマネージド 関数を共存させる方法を示します。Demonstrates how managed and unmanaged functions can co-exist in the same module.
process __declspec 修飾子process __declspec modifier __declspec 修飾子は、プロセスごとに静的変数とグローバル変数を必須にする修飾子です。__declspec modifier that mandates that static and global variables exist per process.
リフレクションの問題 (C++/CLI)Reflection (C++/CLI) CLR バージョンのランタイム型情報を示します。Demonstrates the CLR version of run-time type information.
StringString 文字列リテラルから String へのコンパイラによる変換について説明します。Discusses compiler conversion of string literals to String.
型の転送 (C++/CLI)Type Forwarding (C++/CLI) クライアント コードを再コンパイルしなくても済むように、出荷時のアセンブリの型を別のアセンブリに移動できるようにします。Enables the movement of a type in a shipping assembly to another assembly so that client code does not have to be recompiled.
ユーザー定義の属性User-Defined Attributes ユーザー定義の属性を示します。Demonstrates user-defined attributes.
#using ディレクティブ#using Directive 外部アセンブリをインポートします。Imports external assemblies.
XML に関するドキュメントXML Documentation /doc (ドキュメント コメントの処理) (C/C++) を使用した XML ベースのコード ドキュメントについて説明します。Explains XML-based code documentation by using /doc (Process Documentation Comments) (C/C++)

関連項目See also

C++/CLI (Visual C++) による .NET プログラミング.NET Programming with C++/CLI (Visual C++)
ネイティブと .NET の相互運用性Native and .NET Interoperability