ICDロゴ

C#言語 (C sharp language)

【シー・シャープ・ゲンゴ】

最終更新日: 2002/05/19

 マイクロソフトが開発したオブジェクト指向の言語処理系。2000年6月、マイクロソフトの次世代インターネット戦略(Microsoft.NET)が初めて公表されたとき、主力開発言語の1つとして初めて一般に紹介された。

 この際のマイクロソフトの発表によれば、C#は「より容易に.NET対応プログラムを開発できるようにするために、C/C++を発展させた言語処理系」だとされているが、客観的にみれば、Sun Microsystemsが開発したオブジェクト指向言語であるJavaの特徴を大幅に取り入れており、プログラムの応用分野もJavaに近い。

 たとえばC#では、プログラムによるメモリ管理を大幅に軽減するガーベジ・コレクションの機能が備えられており、プログラマは空使用メモリ領域の分断やメモリ・リークなどを意識することなく、メモリの取得と解放を行うことができる(分断されたメモリの調整などは、ガーベジ・コレクションの機能により、C#ランタイムが自動的に行ってくれる)。このガーベジ・コレクションは、Javaの大きな特徴の1つでもある。

 またこれはC#の言語仕様に直接関係することではないが、C#コンパイラは、MSIL(Microsoft Intermediate Language)と呼ばれる、特定のCPU命令に依存しない中間コードを生成し、これを実行時にJITコンパイラでネイティブ・コードに変換する。Javaも、実行ファイルはバイト・コードと呼ばれるハードウェア非依存の中間コードとして保存され、これを実行時にJava VM(Java Virtual Machine:Java仮想マシン)でそのまま逐次解釈しながら実行するか、JITでネイティブ・コードに変換して実行するようになっている。

 オブジェクト指向に特化されたC#では、グローバルな関数や変数、定数など、プログラムのオブジェクト指向設計を阻害するような仕様は除外されている(C/C++言語ではこれらを使用可能)。さらにC#では、後発である利点を活かし、Javaの弱点を研究し、これをカバーする機能が追加された。たとえばJavaでは、パフォーマンスの都合上、単純な数値や文字列はオブジェクトとして扱われないが(オブジェクトとして取り扱いたければラッパ・オブジェクトを生成しカプセル化する必要がある)、C#では、boxing/unboxingという機構により、それが使われる場面をコンパイラが自動的に判別し、必要ならコンパイラがラッパ・オブジェクトを自動生成するようになっている。この一方でC#は、一定の制限を加えたうえで、インラインC関数による低レベルなシステム処理や、ネイティブ・ポインタも利用可能にしており、従来からのWindows APIやCOMをも使用できるようにしている。

 C#言語は、Microsoft.NETが提唱するWeb ServiceやWebアプリケーションを開発することを念頭において開発された言語処理系であることから、たとえばXMLデータを直接構造体データとしてマップし、高速処理を可能にする機能なども用意されている(Microsoft.NETでは、あらゆる場面でXMLテクノロジを活用している)。またコード中で"WebMethod"という属性を1つタイプするだけで、インターネット経由の情報交換インターフェイスをプログラムに追加する機能なども備えられている。

 C#の言語仕様は、マイクロソフトからECMA(European Computer Manufacturers Association:ヨーロッパをベースとして、情報通信分野の標準化を推進する国際機関)に提出され、標準化に向けてプレビューが行われている。

 C#コンパイラは、2000年末よりマイクロソフトがダウンロード・サービスを開始した.NET Framework SDKの中で提供されており、コマンドラインながら、C#でのプログラム開発を実際に体験できるようになった。グラフィカルなプログラム開発環境であるVisual Studioの最新版、Visual Studio.NETでも、C#サポートが追加され、2001年中には正式版が発売される予定である(Visual Studio.NETのベータ版も、2000年末より一部のプログラマ向けにダウンロード・サービスが開始された)。

Copyright (C) 2000-2007 Digital Advantage Corp.

アイティメディアの提供サービス

キャリアアップ