共通言語ランタイムにおける型の宣言、使用、および管理の方法を定義しており、ランタイムによる言語間統合のサポートにおいても重要な役割を果たします。共通型システムには次のような機能があります。セーフ、およびパフォーマンスの高いコードの実行を可能にするフレームワークを確立します。execution.さまざまなプログラミング言語の完全な実装をサポートするオブジェクト指向モデルを提供します。languages.異なる言語で記述されたオブジェクトが相互に対話できるように、各言語が準拠すべき規則を定義します。含んだライブラリを提供します。development.このトピックは、次のセクションで構成されています。存在するすべての型は、値型と参照型のどちらかに区別されます。types.値型は、オブジェクトがその実際の値で表されるデータ型です。変数に値型のインスタンスが割り当てられると、その変数には値の新しいコピーが代入されます。よって表されるデータ型です。(つまり、元の値を指します)。コピーは作成されません。つの型のカテゴリをサポートしています。暗黙的に派生させることもできます。通常、クラスは、たとえば定義のみを持ち実装は持たないインターフェイスとは対照的に、定義と実装の両方を持ちます。以上存在するクラスもあります。implementation.クラスが持つことのできる特性のいくつかを次の表で説明します。以上を指定する手段が用意されています。対象とするすべてのプログラミング言語で、これらすべての特性を利用できるわけではありません。型から別のクラスを派生できないことを示します。以上のインターフェイスを使用することを示します。クラスをインスタンス化できないことを示します。クラスを使用するには、このクラスから別のクラスを派生させる必要があります。クラスのインスタンスを、基底クラスが指定されている任意の場所で使用できることを示します。メンバーの実装を使用できます。メンバーの実装をその独自の実装でオーバーライドできます。クラスが定義されているアセンブリの外部から、そのクラスを参照できるかどうかを示します。この特性は、最上位のクラスにのみ適用され、入れ子にされたクラスには適用されません。classes.注意クラスは、親クラスまたは構造体で入れ子にすることもできます。入れ子にされたクラスにも、メンバー特性を適用できます。詳細については、「入れ子にされた型」を参照してください。メンバーは抽象メンバーです。以上の抽象メンバーを持つクラスは、それ自体が抽象クラスとなり、新しいインスタンスを作成できません。ランタイムに対応する言語の中には、抽象メンバーを持たないクラスも抽象クラスとしてマークできるものがあります。抽象クラスは、派生クラスが必要に応じて継承したりオーバーライドしたりできる基本的な一連の機能をカプセル化する必要がある場合に使用できます。抽象クラスでないクラスを具象クラスと呼びます。つのコンストラクターが必要で、このコンストラクターにより、各クラスの新しいインスタンスが初期化されます。コンストラクターを明示的に定義しなかった場合、ほとんどのコンパイラでは、自動的にパラメーターなしのコンストラクターが使用されます。暗黙的に派生する値型です。構造体は、メモリ要件が小さい値を表す場合や、厳密に型指定されたパラメーターを持つメソッドに対してパラメーターを値渡しする場合などに、非常に便利です。構造体として定義されています。クラスで定義されている仮想メソッドなどのメソッドと、値型そのものに定義されているすべてのメソッドを、構造体に対して呼び出すことができることを意味します。言い換えれば、構造体には、静的メソッドと非静的メソッドに加え、フィールド、プロパティ、およびイベントを持たせることができます。構造体のインスタンスを作成したり、構造体をパラメーターとして渡したりできるほか、構造体をローカル変数として格納することも、別の値型または参照型のフィールドに格納することもできます。構造体でインターフェイスを実装することもできます。interfaces.ただし、値型は、いくつかの点でクラスとは異なります。暗黙的に継承しますが、他の型を直接継承することはできません。値型はコンストラクターを必要としません。constructors.共通言語ランタイムは、それぞれの値型に対応するボックス化された型を提供します。ボックス化された型とは、値型と同じ状態および動作を備えたクラスのことです。型のパラメーターを受け入れるメソッドに渡されると、ボックス化されます。言語によっては、ボックス化された型が必要なときに特別な構文を使用する必要がありますが、ボックス化された型を必要に応じて自動的に使用する言語もあります。値型を定義するときには、ボックス化された型とボックス化解除された型の両方を定義します。継承される値型で、基になるプリミティブ型の値に対して別名を割り当てます。列挙型には名前、基になる型、および一連のフィールドが存在します。