共通言語ランタイム (CLR) の概要Common Language Runtime (CLR) overview

.NET Framework には、共通言語ランタイムと呼ばれるランタイム環境が用意されています。共通言語ランタイムは、コードを実行し、開発プロセスを支援するサービスを提供します。The .NET Framework provides a run-time environment called the common language runtime, which runs the code and provides services that make the development process easier.

コンパイラとツールにより、共通言語ランタイムの機能が公開されることによって、このマネージド実行環境の利点を活用するコードを記述できるようになります。Compilers and tools expose the common language runtime's functionality and enable you to write code that benefits from this managed execution environment. このような共通言語ランタイムに対応した言語コンパイラを使用して作成したコードはマネージド コードと呼ばれます。マネージド コードは、言語間の統合、言語間の例外処理、強化されたセキュリティ、バージョン管理と配置のサポート、コンポーネント間の対話の簡易モデル、デバッグ サービスとプロファイル サービスなど、さまざまな機能を利用できます。Code that you develop with a language compiler that targets the runtime is called managed code; it benefits from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.

注意

型システム、メタデータの書式、およびランタイム環境 (仮想実行システム) はすべて公的な標準規格の ECMA 共通言語基盤仕様により定義されているため、コンパイラおよびツールは共通言語ランタイムが使用できる出力を生成できます。Compilers and tools are able to produce output that the common language runtime can consume because the type system, the format of metadata, and the runtime environment (the virtual execution system) are all defined by a public standard, the ECMA Common Language Infrastructure specification. 詳細については、「ECMA C# and Common Language Infrastructure Specifications (ECMA C# および共通言語基盤の仕様)」を参照してください。For more information, see ECMA C# and Common Language Infrastructure Specifications.

マネージド コードが共通言語ランタイムからサービスを受けられるようにするために、言語コンパイラは、そのコード内の型、メンバー、および参照を記述したメタデータを生成する必要があります。To enable the runtime to provide services to managed code, language compilers must emit metadata that describes the types, members, and references in your code. メタデータはコード内に格納されます。つまり、共通言語ランタイムの読み込み可能なすべてのポータブル実行可能 (PE) ファイルには、メタデータが含まれていることになります。Metadata is stored with the code; every loadable common language runtime portable executable (PE) file contains metadata. 共通言語ランタイムは、クラスの検索と読み込み、メモリ内でのインスタンスのレイアウト、メソッドの呼び出しの解決、ネイティブ コードの生成、セキュリティの強化、およびランタイムのコンテキスト境界の設定にメタデータを使用します。The runtime uses metadata to locate and load classes, lay out instances in memory, resolve method invocations, generate native code, enforce security, and set run-time context boundaries.

共通言語ランタイムはオブジェクトのレイアウトを自動的に処理し、それらのオブジェクトへの参照を管理し、不要になったオブジェクトを解放します。The runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. このような方法で有効期間を管理されるオブジェクトをマネージド データと呼びます。Objects whose lifetimes are managed in this way are called managed data. ガベージ コレクションによって、一般的なプログラミング エラーだけでなくメモリ リークもなくなります。Garbage collection eliminates memory leaks as well as some other common programming errors. コードがマネージド コードの場合、作成する .NET Framework アプリケーションではマネージド データ、アンマネージド データ、またはマネージド データとアンマネージド データの両方を使用できます。If your code is managed, you can use managed data, unmanaged data, or both managed and unmanaged data in your .NET Framework application. プリミティブ型などのデータ型は言語コンパイラが独自に提供しているため、データがマネージド データかどうかが不明な (または把握する必要がない) 場合もあります。Because language compilers supply their own types, such as primitive types, you might not always know (or need to know) whether your data is being managed.

共通言語ランタイムでは、複数の言語間で対話できるオブジェクトを含むコンポーネントやアプリケーションを簡単にデザインできます。The common language runtime makes it easy to design components and applications whose objects interact across languages. 異なる言語で記述されたオブジェクトが相互に対話でき、それらのオブジェクトの動作が緊密に統合されます。Objects written in different languages can communicate with each other, and their behaviors can be tightly integrated. たとえば、あるクラスを定義してから、そのクラスの派生クラスを別の言語で作成したり、そのクラスに対して別の言語で記述したメソッドを呼び出したりできます。For example, you can define a class and then use a different language to derive a class from your original class or call a method on the original class. また、あるクラスのインスタンスを別の言語で記述されたクラスのメソッドに渡すこともできます。You can also pass an instance of a class to a method of a class written in a different language. このような言語間の統合を実現できるのは、共通言語ランタイムに対応した言語コンパイラとツールが、共通言語ランタイムによって定義されている共通型システムを採用し、型の作成、使用、永続化、型へのバインディング、および新しい型の定義に関する共通言語ランタイムの規則に従っているためです。This cross-language integration is possible because language compilers and tools that target the runtime use a common type system defined by the runtime, and they follow the runtime's rules for defining new types, as well as for creating, using, persisting, and binding to types.

すべてのマネージド コンポーネントは、関連するコンポーネントとリソースについての情報をメタデータの一部として保持しています。As part of their metadata, all managed components carry information about the components and resources they were built against. 共通言語ランタイムはこの情報を使用して、作成したコンポーネントまたはアプリケーションが必要とする特定バージョンのコンポーネントやリソースがあることを確認します。これにより、不明な依存関係によってコードが中断される確率が低くなります。The runtime uses this information to ensure that your component or application has the specified versions of everything it needs, which makes your code less likely to break because of some unmet dependency. 登録情報や状態データはレジストリ内では設定や保守が難しくなるため、レジストリには格納されなくなりました。Registration information and state data are no longer stored in the registry where they can be difficult to establish and maintain. 代わりに、定義した型 (およびその依存関係) に関する情報はコードと共にメタデータとして保存されます。これによって、コンポーネントのレプリケーションと削除がより簡単に実行できるようになります。Instead, information about the types you define (and their dependencies) is stored with the code as metadata, making the tasks of component replication and removal much less complicated.

言語コンパイラおよびツールは、開発者にとってわかりやすく役に立つ方法で共通言語ランタイムの機能を公開します。Language compilers and tools expose the runtime's functionality in ways that are intended to be useful and intuitive to developers. つまり、ある環境では重視されている共通言語ランタイムの機能が、別の環境ではそれほど重視されていないという場合もあります。This means that some features of the runtime might be more noticeable in one environment than in another. 共通言語ランタイムがどのような利点をもたらすかは、使用するコンパイラやツールによって異なります。How you experience the runtime depends on which language compilers or tools you use. たとえば、Visual Basic の開発者が共通言語ランタイムを使用した場合は、Visual Basic 言語のオブジェクト指向機能が強化されたと感じるでしょう。For example, if you are a Visual Basic developer, you might notice that with the common language runtime, the Visual Basic language has more object-oriented features than before. ランタイムの利点は次のとおりです。The runtime provides the following benefits:

  • パフォーマンスの向上。Performance improvements.

  • 異なる言語で開発されたコンポーネントを簡単に利用可能。The ability to easily use components developed in other languages.

  • クラス ライブラリによって提供される拡張性のある型。Extensible types provided by a class library.

  • 継承、インターフェイス、オーバーロードなどのオブジェクト指向プログラミングの言語機能。Language features such as inheritance, interfaces, and overloading for object-oriented programming.

  • マルチスレッドでスケーラブルなアプリケーションの作成を可能にする明示的なフリー スレッドのサポート。Support for explicit free threading that allows creation of multithreaded, scalable applications.

  • 構造化例外処理のサポート。Support for structured exception handling.

  • カスタム属性のサポート。Support for custom attributes.

  • ガベージ コレクション。Garbage collection.

  • タイプ セーフとセキュリティを強化するために関数ポインターではなくデリゲートを使用。Use of delegates instead of function pointers for increased type safety and security. デリゲートの詳細については、「共通型システム」を参照してください。For more information about delegates, see Common Type System.

CLR のバージョンCLR versions

.NET Framework のバージョン番号はそれに含まれている CLR のバージョン番号には必ずしも対応しません。The .NET Framework version number doesn't necessarily correspond to the version number of the CLR it includes. .NET Framework のバージョンとそれに対応する CLR バージョンの一覧については、「.NET Framework のバージョンおよび依存関係」を参照してください。For a list of .NET Framework versions and their corresponding CLR versions, see .NET Framework versions and dependencies. .NET Core のリリースの製品バージョンは 1 つです。つまり、個別の CLR バージョンはありません。.NET Core releases have a single product version, that is, there is no separate CLR version. .NET Core バージョンの一覧については、「Download .NET Core」(.NET Core のダウンロード) を参照してください。For a list of .NET Core versions, see Download .NET Core.

TitleTitle 説明Description
マネージド実行プロセスManaged Execution Process 共通言語ランタイム利用するために必要な手順について説明します。Describes the steps required to take advantage of the common language runtime.
自動メモリ管理Automatic Memory Management ガベージ コレクターによるメモリの割り当て方法および解放方法について説明します。Describes how the garbage collector allocates and releases memory.
.NET Framework の概要Overview of the .NET Framework 共通型システム、言語間での相互運用性、マネージド実行、アプリケーション ドメイン、アセンブリなどの .NET Framework の主要な概念について説明します。Describes key .NET Framework concepts such as the common type system, cross-language interoperability, managed execution, application domains, and assemblies.
共通型システムCommon Type System 言語間の統合をサポートするために共通言語ランタイムで型を宣言、使用、および管理する方法について説明します。Describes how types are declared, used, and managed in the runtime in support of cross-language integration.