C#とは以下のことを指す。
この記事ではプログラミング言語 C#について扱う。
概要
Microsoft社が提唱して生まれた言語。ISOやJISにも標準規格として登録されている。 名前の由来は C++ (しーぷらすぷらす) をさらにインクリメント(進める)して C++++ とし、それでは見づらいので 2x2に並べて C#としたらしい。 なお、本来#はナンバーの意味で、半音上を表す♯とは違う記号であるが、便宜上半角の#(ナンバー)を用いることになっている。
特徴
言語的特徴として、(初期バージョンでは)JavaとC++(そしてDelphi)の分かりやすいところと便利なところをそれぞれ採用した形(+α)となっている。また、.NET Frameworkの機能が生きるようにデザインされている。バージョン3.0や4.0では関数型言語や動的言語由来の機能を多く取り込んでいる。
具体的な特徴
「howからwhatへ」という主義を掲げ、開発者が行いたいこと(what)を可能な限りそのまま書けるように言語仕様を進化させている。アプリケーション開発に置いて需要が高い割に面倒の多いGUI開発と、データアクセスに関する機能が特に多い。
GUI開発向けの機能としては、デリゲート(関数ポインターのオブジェクト指向版)やイベント(イベントハンドラーの追加・削除を行うための仕組み)などがあげられる。
データアクセス向けの機能としては、LINQ(Language Integrated Query)と呼ばれる機能があり、並列処理を見こしたデータ操作を、意図通りに書くことができる。
一方で、パフォーマンスへの配慮から、ポインターなどの低級(CPUの実動作に近いという意味)な機能も(限定的な文脈下でのみ)サポートしている。ただし、パフォーマンス上の理由でポインターが必要とされる場面はほとんどない。
専門的に書いた特徴
- なまじ似てるせいで、Javaと宗教対立が激しい。特に命名規則(JavaはmethodName、C#はMethodName)
- ガベージコレクション完備
- 中間言語(IL)にコンパイルされる(標準仕様としてそう決まっているわけではないが、現実にある実装はIL前提)
- if(…) の中にはboolしかかけない(if (x = 0) とかやらかせない)
- プロパティのおかげでsetter/getter地獄から解放
- ヘッダー不要、物理パスに依存しない
- 最近、割かしワンライナー言語。
var sum = Enumerable.Range(1, 100).Where(x => x % 3 == 0).Sum(x => x * x);
と書くだけで1から100までの、3で割り切れる数の2乗の総和を得られる。お手軽! - C#のジェネリックはJavaのと違ってちゃんとILレベルで対応している。型安全
- 同上、C++のtemplateと違ってマクロ展開的なことしない。実行ファイルサイズ肥大化しない
- 標準で抽象構文木からの動的コード生成機能持ってて、そこそこメタプログラミングも可能
- バージョン4.0から動的ディスパッチに対応し、リフレクション、COMや動的言語との相互運用に力を発揮する
- 文字コードが規定でユニコードに対応しているためどんな言語でも文字化けしない
使用者の声
- Javaからの移植楽だNE
- 今はもうJavaの方がC#の後追い中
- VC#の入力補完すごいね。
- ちょっとくらい遅くたっていいじゃない。楽なんだもの。
- スクリプト言語と比べれば随分と速い
- C#を組むと他の言語メンドイ・・・・w
- 書いてて楽しいし、C#たんかわいい
サンプルコード
namespace Niconico
{
class NicoVideo
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello NicoNico!");
}
}
}
関連動画
関連商品
関連コミュニティ
関連項目
- 10
- 0pt