共通型システム

共通型システム（きょうつうかたしすてむ、、略称 : CTS）は、マイクロソフトが開発した.NET Framework対応のプログラミング言語で使われるデータ型の統一、もしくは統一された型のこと。整数型などの基本的なデータ型以外に、クラスやインターフェイスについても定義されている。例えば、codice_1は32ビット符号付き整数型、codice_2は64ビット符号付き整数型などと定められている。これはプラットフォーム、オペレーティングシステム (OS) によらず一意に決まっている。
.NET Frameworkに属する全ての言語は、2種類の言語仕様に則っていなければならない。1つがCTSであり、もう一つが共通言語仕様 (CLS) である。CTSとCLSによって、.NET Framework対応のプログラミング言語間で型の互換性が維持できる。CLSの一例を挙げると、クラスを定義できること、さらにクラス間の継承ができること、つまり、オブジェクト指向言語でなければならないことを定めている。
具体例.
従来のプログラミング言語では、プラットフォームや言語によって、扱える型の種類や長さが異なっていた。例えば、Visual Basic 6.0の組み込み整数型であるcodice_3型やcodice_4型のサイズはそれぞれ16ビットと32ビットであり、64ビット整数型はサポートされていなかった。VB.NETでは、codice_5をSystem.Int16への組み込みエイリアス型、codice_3をSystem.Int32への組み込みエイリアス型、そしてcodice_4をSystem.Int64への組み込みエイリアス型として実装している。同様にC#では、codice_8をSystem.Int16への組み込みエイリアス型、codice_9をSystem.Int32への組み込みエイリアス型、そしてcodice_10をSystem.Int64への組み込みエイリアス型として実装している。これにより、各言語は相互参照が可能になり、例えばC#で書いたライブラリをVB.NETで参照する、あるいはその逆も可能になっている。
なぜ共通型システムが必要か.
各プログラミング言語はそれぞれ独自のデータ型を組み込む傾向がある。たとえば文字列を表す型として、Visual Basicは組み込みのcodice_11型を用意しているが、内部的にCOMのcodice_12構造体を使っている。C/C++ではcodice_13型の配列もしくはcodice_14型の配列を文字列とみなす。STLではcodice_15およびcodice_16クラスを、ATL/MFCではcodice_17 (codice_18/codice_19) クラスを提供する。また、C/C++ (Visual C++) のcodice_9型はWin16環境では16ビット、Win32/Win64環境では32ビットだが、Visual Basicのcodice_3型は16ビットである。これらのデータ型は、言語間での互換性がない。
.NET Frameworkの目標の1つはアプリケーション開発を容易にすることである。.NET Frameworkの前身であるCOMは、プログラミング言語の壁を超えてソフトウェアコンポーネントをバイナリレベルで共有・再利用することを可能にする技術だが、開発者にとって多くの頭痛の種をもたらした。GUIDやHRESULTの定義、早期バインディング (early binding) と遅延バインディング (late binding)、参照カウントの管理、実行環境のスレッディングモデル、そして上述の型の互換性などである。幸い、その状況から開発者を救うためにVisual BasicやATLといった開発環境やフレームワークが登場し、この複雑さを解消した。例えばVisual Basicでは、適切なGUIDを自動的に生成したり、アプリケーション内で使用されるCOMオブジェクトの参照カウントを自動的に管理したりすることができた。しかし、Visual BasicのCOMの実装には依然として不満な点が多かった。
これを解決するために、さまざまな言語が共通して持つ型のシステムが考え出された。これが.NET Frameworkの共通型システムである。
型の種類.
共通型システムは大別して2つの型をサポートする。