言語機能とライブラリ型間のリレーションシップ

C# 言語の定義には、標準ライブラリに特定の型とその型にアクセス可能な特定のメンバーがある必要があります。 コンパイラは、多くの異なる言語機能にこれらの必要な型とメンバーを使用するコードを生成します。 このため、C# バージョンは、対応する .NET バージョン以降でのみサポートされます。 これにより、正しい実行時の動作と、必要なすべての型とメンバーの可用性が保証されます。

この標準ライブラリ機能に対する依存関係は、C# 言語の最初のバージョンからその一部となっています。 そのバージョンでは、次の例が含まれています。

  • Exception - コンパイラによって生成されたすべての例外に使用されます。
  • String: string のシノニム。
  • Int32: int のシノニム。

その最初のバージョンは単純でした。コンパイラと標準ライブラリは共に出荷され、それぞれ 1 つのバージョンしかありませんでした。

C# の以降のバージョンでは、随時、依存関係に新しい型またはメンバーが追加されています。 例としては: INotifyCompletionCallerFilePathAttribute、および CallerMemberNameAttribute があります。 C# 7.0 では、タプル言語機能を実装するために、ValueTuple への依存関係が追加されました。 C# 8 では、他の機能の中でも、範囲とインデックス のために System.IndexSystem.Range が必要です。 新しいバージョンごとに、追加の要件が追加される場合があります。

言語設計チームは、準拠している標準ライブラリで必要な型およびメンバーのアクセス領域を最小限に抑えることに取り組んでいます。 その目標は、新しいライブラリ機能が言語にシームレスに組み込まれているクリーン設計と両立させることです。 将来、標準ライブラリ内の新しい型とメンバーを必要とする C# の新バージョンが登場するでしょう。 C# コンパイラ ツールは現在、サポートされているプラットフォームの .NET ライブラリのリリース サイクルと切り離されています。