共通型システム
共通型システム(きょうつうかたしすてむ、テンプレート:Lang-en、略称 : CTS)は、マイクロソフトが開発した.NET Framework対応のプログラミング言語で使われるデータ型の統一、もしくは統一された型を言う。整数型などの基本的なデータ型以外に、クラスやインタフェースについても定義されている。例えば、Int32は32ビット符号付き整数型、Int64は64ビット符号付き整数型などと定められている。これはプラットフォーム、オペレーティングシステム (OS) によらず一意に決まっている。
従来のプログラミング言語では、言語間で型の長さが異なっていた。例えば、Visual Basic 6.0のInteger型は16ビットだった。これをVB .NETでは32ビットに修正している。これにより、各言語は相互参照が可能になり、例えばC#で書いたライブラリをVB .NETで参照する、ということも可能になっている。
.NET Frameworkに属する全ての言語は、2種類の言語仕様に則っていなければならない。1つがCTSであり、もう一つが共通言語仕様 (CLS) である。CTSとCLSによって、.NET Framework対応のプログラミング言語間で型の互換性が維持できる。CLSの一例を挙げると、クラスを定義できること、さらにクラス間の継承ができること、つまり、オブジェクト指向言語でなければならないことを定めている。
なぜ共通型システムが必要か
各プログラム言語はそれぞれ独自のデータ型を組み込む傾向がある。たとえば文字列を表すのにVisual Basicは内部的にBSTR構造体を使っており、C/C++ではchar
とwchar_t
データ型を利用し、MFCではCString
クラスを提供する。また、C++のint
型はWindows環境では32ビットだが、Visual BasicのInteger
型は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つの型をサポートする。
- 値型
- 値型はデータを直接的に保持する。値型のインスタンスはスタックに確保されるか、あるいは構造体の中に直接確保される。値型には組み込みのもの(ランタイム内で実装されているもの)、ユーザ定義のもの、列挙型がある。
- 参照型
- 参照型はデータのメモリアドレスへの参照を保持する。参照型のデータはヒープに確保される。参照型には自己記述型 (self-describing types)、ポインタ型、インタフェース型があり、自己記述型はさらに配列型、クラス型に分けられる。さらにクラス型にはユーザ定義クラス、ボックス化された値型、デリゲートがある。