言語キーワード (C++/CLI)]
いくつかの言語キーワードは、Visual C++ では C++ マネージ拡張から変更されています。
新しい Visual C++ 構文では、プレフィックスとしての 2 つのアンダースコアがすべてのキーワードから削除されます (__identifier を除く)。 たとえば、プロパティは __property ではなく property として宣言されるようになりました。
マネージ拡張で 2 つのアンダースコアがプリフィックスとして使用されていたのには、2 つの大きな理由がありました。
2 つのアンダースコアは、ISO-C++ 標準にローカル拡張を提供するための標準の方法です。 マネージ拡張のデザインの第 1 の目標は、新しいキーワードやトークンなど、標準言語との非互換性を導入しないことでした。 マネージ参照型のオブジェクトの宣言にポインター構文が選択されたのも、主にこうした理由によるものです。
標準に準拠することに加えて、2 つのアンダースコアを使用すると、言語ユーザーの既存のコード ベースへの干渉を合理的に阻止できます。 これはマネージ拡張のデザインのもう 1 つの主要な目標でした。
2 つのアンダースコアを削除することになっても、標準準拠への Microsoft の姿勢は今後も変わりません。 しかし、CLR の動的オブジェクト モデルのサポートは、新しい強力なプログラミング パラダイムです。 この新しいパラダイムをサポートするためには、独自の高度なキーワードおよびトークンが必要となります。 私たちは、この新しいパラダイムの最高の表現と、それを統合し標準言語をサポートする方法を追求してきました。 新しい構文デザインが、本質的に異なる 2 つのオブジェクト モデルをうまく融合し、ファースト クラスのプログラミング体験をユーザーに提供します。
同じように、これらの新しい言語キーワードによる干渉を最小限に抑えることにも、弊社は注意を払っています。 この問題はコンテキスト キーワードとスペース区切りキーワードを使用することによって解決されました。 実際の新しい言語構文を見る前に、これらの 2 つの特殊なキーワードの特徴を理解しておきましょう。
コンテキスト キーワードは特定のプログラム コンテキスト内で特別な意味を持ちます。 たとえば、sealed は一般的なプログラム内では通常の識別子として扱われます。 しかし、マネージ参照クラス型の宣言の部分で使用される場合は、そのクラス宣言のコンテキスト内のキーワードとして扱われます。 これによって、言語に新しいキーワードを導入した場合の影響を最小限に抑えることができます。これは既存のコード ベースを持つユーザーにとっては非常に重要なことであると考えています。 それと同時に、新しい機能を使用するユーザーには、追加の言語機能について最高の経験を提供します。これはマネージ拡張には欠けていると考えていた点です。 sealed の使用例については、「マネージ クラス型の宣言」を参照してください。
スペース区切りキーワード (value class など) はコンテキスト キーワードの特殊なケースです。 これは、既存のキーワードとコンテキスト修飾子をスペースで区切って組み合わせたものです。 このペアは、2 つのキーワードではなく 1 つの単位として扱われます。