C Sharp

提供: MonoBook
ナビゲーションに移動 検索に移動

C#(しーしゃーぷ)とは、マイクロソフトが開発した、どちらかというとオブジェクト指向寄りだが、関数型プログラミング言語の要素を取り入れたり、もともとは強い静的型付け言語であったが、いつのまにか(C#4.0から)動的型付け言語の特性も備え、旧来の形式張った分類法ではどうしたらいいのか困るあらゆる方向を向いているプログラミング言語である。 C#のECMA Internationalによる標準規格名は「ECMA-334」である。

C#と.NET Frameworkはイコールと思われていることが多いが、あくまでC#は特定の環境に依存しないプログラミング言語であり、ECMAなどの標準規格においても言語(ECMA-334)と動作環境(ECMA-335)は分離されている。

概要[編集 | ソースを編集]

C#は、常に日陰者であったボーランド社のTurbo Pascal(とくにTurbo Pascal 5.5の血が濃い)の流れを組むプログラミング言語であり、Object PascalDelphi)に続くTurbo Pascal一族の正当な後継言語である。

パッと見た構文はJavaに似ているように見えるが、これは「Javaのパクリだから簡単だよ」と世に溢れるJavaプログラマーを騙し、C#のプロジェクトに誘い込むための罠である。あくまでJava風なのは見た目だけであり、構文や掟は基本的にTurbo Pascalであるため、騙されたJavaプログラマーは一時的に精神錯乱状態に陥るが、そこで脱落しなかった多くの者はPascal教へ入信し、プログラマーの悟りをひらくこととなる。

生い立ち[編集 | ソースを編集]

遙か昔、ボーランド社が売っていたTurbo PascalDelphiアンダース・ヘルスバーグによる洗練された設計と圧倒的なポテンシャルを持っていた。にも関わらずサードパーティ製開発ツールであるがため常に二番手の日陰者であった。

そのボーランド社で1994年頃、創業メンバーと会社乗っ取りを目論む取締役会との派閥闘争が勃発。この派閥闘争は創業メンバーの敗北に終わり、フィリップ・カーンアンダース・ヘルスバーグポール・グロスをはじめとする創業初期メンバーと、その関連部署(主に開発ツール部門)の社員が全員クビになるという大事件が発生した。

それを知ったビル・ゲイツが「私の味方になれば世界の半分をやろう」と言ったかどうかは知らないが、ボーランドをリストラされたほぼ全員がマイクロソフトに再就職し、復讐を誓ったという。そしてDelphiVisual Component Library (VCL)を魔改造したC#と.NET Frameworkが生まれた。

その当時、マイクロソフトには創業の祖であり同社にとって創造主、いわゆる神であるポール・アレンビル・ゲイツの作ったMS-BASIC、その流れを組み、かつMS-DOSの生みの親であり第二の神であるティム・パターソンが指揮したVisual Basicが主力であった。にも関わらず、それらを全て捨てるという決断を下すほどTurbo Pascalの一族は圧倒的な完成度であったという。

以上のような経緯もあり、公開当初のC# 1.x系はDelphiの見た目を変えただけの方言という感じで、標準ライブラリもVCLそのものでバグまで完全移植という代物であったが、当時大流行していたJava風に実行ランタイム仮想マシンメソッドポインタデリゲートなどと各種用語の呼び名も刷新することで「まるで新しいもの」と思わせた細かいマーケティング戦略(いわゆる「リネーム商法」)も功を奏し、Delphi以前を知らない多くの人はコロッと騙された。

なお、C# 2.0から壮絶な進化が始まり、2012年3月31日時点での最新バージョンであるC# 4.0は、ほぼ初期(C# 1.x)の原型をとどめない形となっている。

進化の系譜[編集 | ソースを編集]

C# 1.0[編集 | ソースを編集]

ほぼDelphiそのもの。

C# 1.2[編集 | ソースを編集]

コメント形式が変わった。

C# 2.0[編集 | ソースを編集]

[1]

C# 3.0[編集 | ソースを編集]

  • LINQ
  • 型推論
  • 拡張メソッド
  • ラムダ式
  • 初期化子
  • 匿名型
  • 暗黙型付け配列
  • 自動プロパティ
  • パーシャルメソッド

[2]

C# 4.0[編集 | ソースを編集]

  • dynamic
  • オプション引数
  • 名前付き引数
  • ジェネリックの共変性・反変性
  • COM 相互運用時の特別処理

[3]

C# 5.0[編集 | ソースを編集]

  • 非同期処理
  • Caller Info 属性
  • foreach の仕様変更

[4]

記述例[編集 | ソースを編集]

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]