共通型システム
値型はデータを直接的に保持する。値型のインスタンスはスタックに確保されるか、あるいは構造体の中に直接確保される。値型には整数や浮動小数点数といった組み込みのもの(ランタイム内で実装されているもの)、ユーザー定義のもの、そして列挙型がある。いずれもCTSでは構造体の一種として扱われる。
参照型はデータのメモリアドレスへの参照を保持する。参照型のデータはヒープに確保される。参照型には自己記述型 (self-describing types)、ポインタ型、インターフェイス型があり、自己記述型はさらに配列型、クラス型に分けられる。さらにクラス型にはユーザー定義クラス、ボックス化された値型、デリゲートがある。文字列型System.Stringはimmutableな参照型として実装されている。
従来のプログラミング言語では、プラットフォームや言語によって、扱える型の種類や長さが異なっていた。例えば、Visual Basic 6.0の組み込み整数型であるInteger型やLong型のサイズはそれぞれ16ビットと32ビットであり、64ビット整数型はサポートされていなかった。VB.NETでは、ShortをSystem.Int16への組み込みエイリアス型、IntegerをSystem.Int32への組み込みエイリアス型、そしてLongをSystem.Int64への組み込みエイリアス型として実装している。同様にC#では、shortをSystem.Int16への組み込みエイリアス型、intをSystem.Int32への組み込みエイリアス型、そしてlongをSystem.Int64への組み込みエイリアス型として実装している。これにより、各言語は相互参照が可能になり、例えばC#で書いたライブラリをVB.NETで参照する、あるいはその逆も可能になっている。