C#

Microsoft が開発した静的型付けのオブジェクト指向言語。.NET 上で幅広い開発に使える

プログラミング言語.NET
C#」の技術書を見る →

C# とは

C# (シーシャープ) は、Microsoft の内部で開発された静的型付けのオブジェクト指向プログラミング言語だ。言語仕様の標準である ECMA-334 の初版は、この言語の主たる考案者として Anders Hejlsberg・Scott Wiltamuth・Peter Golde の 3 名を挙げている。最初に広く配布された実装は 2000 年 7 月に .NET Framework の取り組みの一部として Microsoft から公開され、標準化はヒューレット・パッカード・インテル・Microsoft の提出をもとに 2000 年 9 月発足の ECMA TC39 TG2 が担い、2001 年 12 月に初版が成立した。.NET プラットフォーム上で動作し、Web アプリ、デスクトップアプリ、ゲーム (Unity)、クラウドサービスまで幅広い領域で使われる。Java の影響を受けつつ、独自の進化を重ねてきた。

特徴

C# は静的型付けによりコンパイル時に多くの誤りを検出でき、大規模開発でも安全性を保ちやすい。プロパティ、LINQ (データ操作の統一構文)、async/await による非同期処理、ガベージコレクションによる自動メモリ管理など、生産性を高める機能が言語仕様に組み込まれている。

これらは実行時ライブラリが裏で頑張っているだけの飾りではなく、コンパイラによる書き換えとして規格に定められている。LINQ の問い合わせ構文は、規格上まず WhereSelect といった名前のメソッド呼び出しの連なりへ機械的に変換され、そのうえで通常の式として型検査される。await 演算子は、待っている処理が終わるまで囲んでいるメソッドの評価をいったん止める働きを持つ。どちらも「対応する名前のメソッドや型が相手側に揃っていること」が前提で、揃っていなければ同じ構文でもコンパイルが通らない。

.NET Framework から統一された .NET へ

C# の実行基盤は一本道ではなかった。Windows 向けの .NET Framework と、クロスプラットフォームな .NET Core が並走した時期があり、同じ C# でも動かせる対象が分かれていた。Microsoft は 2019 年 5 月にこれを一本化する計画を公表し、.NET Core・.NET Framework・Xamarin・Mono の良いところを集めた単一の実行環境を目指すとした。名前から "Core" が落ちたのはその表明であり、4 を飛ばして .NET 5 にしたのは .NET Framework 4.x との混同を避けるためだ。統一版は 2020 年 11 月に出て、以後はメジャー版を毎年 11 月に出す形が続いている。

C# のバージョンもこの年次リリースに紐づく。最新は 2025 年 11 月の C# 14 で、.NET 10 と同時に出ている (2026 年 8 月時点)。つまり書ける構文は言語名だけでは決まらず、対象に選んだ .NET の版で決まる。古い .NET Framework 向けの保守では、新しい構文は原則使えないものとして設計したほうが手戻りが少ない。

Java との比較

観点C#Java
主な基盤.NETJVM
開発元MicrosoftOracle (元 Sun)
言語機能LINQ、プロパティなど豊富堅実で互換性重視
ゲーム開発Unity で強い限定的

両者は思想が近いが、エコシステムと得意分野が異なる。

採用領域と注意点

C# は Windows 環境や企業システム、Unity を用いたゲーム開発で特に強みを発揮する。かつては Microsoft 色が濃くプラットフォームが限られたが、オープンソース化とクロスプラットフォーム対応でその制約は薄れた。一方で、機能が豊富なぶん言語仕様は大きく、新しい構文も次々追加されるため、チームでどの機能まで使うかの方針を揃えると可読性を保ちやすい。

規格と実装は同じ速さで進まない

C# の言語仕様は ECMA-334 として標準化され、ISO/IEC でも規格になっている (ISO/IEC 23270 の 2003 年・2006 年・2018 年版、2023 年版は ISO/IEC 20619)。ただし規格が言語の最前線を写しているわけではない。最新の ECMA-334 第 7 版 (2023 年 12 月) が前版に加えて収録したのは、タプル型・パターンマッチング・ローカル関数・in 引数・readonly struct といった C# 7 系までの機能で、C# 8 で入った null 許容参照型はまだ規格本文に含まれていない (2026 年 8 月時点)。言語の事実上の定義は Microsoft の実装と設計記録の側にある。

だから C のように「規格の版を指定して書く」流儀は C# には当てはまらない。固定すべきなのは、対象フレームワーク (どの .NET 向けか) と言語バージョンの指定であり、その 2 つをプロジェクトファイルに明記して CI でも同じ設定を使う。「手元では通るのにビルドサーバーで落ちる」の多くはここが揃っていないだけだ。

C# を選ぶかの判断

  1. 実行基盤を .NET に寄せられるか。 ライブラリ・配置・監視までまとめて .NET の作法に乗せられるなら生産性は高い。既存資産が別の実行環境に寄っているなら、言語の良さより基盤の分断のコストが勝つ。
  2. 重心が Windows・企業システム・Unity のどこかにあるか。 これらの領域では周辺の道具立てと求人の厚みが揃っており、選ばない理由を探すほうが難しい。
  3. 使う機能の範囲を決められるか。 版ごとの新構文が多いため、対象の .NET と言語バージョン、そして「使う構文の線引き」をチームで決めておくと、読み手が変わっても崩れにくい。

この記事は役に立ちましたか?

関連用語

関連する記事