言語機能とライブラリ型間のリレーションシップRelationships between language features and library types

C# 言語の定義は、標準ライブラリが特定の型とその型にアクセス可能な特定のメンバーを持つことを必要とします。The C# language definition requires a standard library to have certain types and certain accessible members on those types. コンパイラは、多くの異なる言語機能にこれらの必要な型とメンバーを使用するコードを生成します。The compiler generates code that uses these required types and members for many different language features. これらの型やメンバーがまだ展開されていない環境のためのコードを記述する場合、必要に応じてその言語の新しいバージョンに必要な型が含まれている NuGet パッケージが利用できます。When necessary, there are NuGet packages that contain types needed for newer versions of the language when writing code for environments where those types or members have not been deployed yet.

この標準ライブラリ機能に対する依存関係は、C# 言語の最初のバージョンからその一部となっています。This dependency on standard library functionality has been part of the C# language since its first version. そのバージョンでは、次の例が含まれています。In that version, examples included:

  • Exception: すべてのコンパイラーによって生成された例外に使用されます。Exception - used for all compiler generated exceptions.
  • String: C# string 型は String のシノニムです。String - the C# string type is a synonym for String.
  • Int32: int のシノニムです。Int32 - synonym of int.

その最初のバージョンは単純でした。コンパイラと標準ライブラリは共に出荷され、それぞれ 1 つのバージョンしかありませんでした。That first version was simple: the compiler and the standard library shipped together, and there was only one version of each.

C# の以降のバージョンでは、随時、依存関係に新しい型またはメンバーが追加されています。Subsequent versions of C# have occasionally added new types or members to the dependencies. 例として、INotifyCompletionCallerFilePathAttributeCallerMemberNameAttribute があります。Examples include: INotifyCompletion, CallerFilePathAttribute and CallerMemberNameAttribute. C# 7.0 では、 タプル言語機能を実装するためにValueTupleへの依存関係が追加されます。C# 7.0 continues this by adding a dependency on ValueTuple to implement the tuples language feature.

言語設計チームは、準拠している標準ライブラリで必要な型およびメンバーのアクセス領域を最小限に抑えることに取り組んでいます。The language design team works to minimize the surface area of the types and members required in a compliant standard library. その目標は、新しいライブラリ機能が言語にシームレスに組み込まれているクリーン設計と両立させることです。That goal is balanced against a clean design where new library features are incorporated seamlessly into the language. 将来、標準ライブラリ内の新しい型とメンバーを必要とする C# の新バージョンが登場するでしょう。There will be new features in future versions of C# that require new types and members in a standard library. 自分の作業でこれらの依存関係を管理する方法を理解することが重要です。It's important to understand how to manage those dependencies in your work.

依存関係の管理Managing your dependencies

C# コンパイラ ツールは現在、サポートされているプラットフォームの .NET ライブラリのリリース サイクルと切り離されています。C# compiler tools are now decoupled from the release cycle of the .NET libraries on supported platforms. 実際、.NET ライブラリごとに異なるリリース サイクルがあります。Windows の .NET Framework は、Windows Update としてリリースされ、.NET Core は個別のスケジュールで出荷されます。また、Xamarin バージョンのライブラリの更新は、各ターゲット プラットフォーム用の Xamarin ツールとともに出荷されます。In fact, different .NET libraries have different release cycles: the .NET Framework on Windows is released as a Windows Update, .NET Core ships on a separate schedule, and the Xamarin versions of library updates ship with the Xamarin tools for each target platform.

ほとんどの場合、これらの変更に気付くことはありません。The majority of time, you won't notice these changes. ただし、そのプラットフォーム上の .NET ライブラリ内にまだない機能を必要とする言語の新しいバージョンを使用している場合は、それらの新しい型を提供する NuGet パッケージを参照することになります。However, when you are working with a newer version of the language that requires features not yet in the .NET libraries on that platform, you'll reference the NuGet packages to provide those new types. お使いのアプリがサポートしているプラットフォームが新しいフレームワークのインストールで更新されるときに、この余分な参照を削除できます。As the platforms your app supports are updated with new framework installations, you can remove the extra reference.

この分離は、対応するフレームワークがない可能性があるマシンを対象とする場合でも、新しい言語機能を使用できることを意味します。This separation means you can use new language features even when you are targeting machines that may not have the corresponding framework.