C#: C#入門
もしブロック遊びをしたことがあるなら、プログラミングの本質――単純なパーツを組み合わせて複雑な構造を作り上げる――をすでに理解しているはずです。C#はまさにそのような「ブロック」のようなものです。すっきりとした構文、型安全、そして強力な機能を備えており、コードの最初の1行からプロ仕様のアプリケーションを構築することができます。
1. C#とは
C#(「シー・シャープ」と発音)は、2000年にマイクロソフトが、主任設計者のアンダース・ヘイルスバーグをリーダーとして開発し、2002年に正式にリリースされたオブジェクト指向プログラミング言語です。 その名称に含まれる#は、4つの+記号を並べたもので、C/C++を「一歩先」にいくことを示唆しています。
C#は.NETプラットフォーム上で動作し、CLR(Common Language Runtime)によってコンパイルおよび実行され、FCL(Framework Class Library)による充実したAPIサポートが提供されています。簡単に言えば:
| 構成要素 | 役割 | 例え |
|---|---|---|
| C# 言語 | コード記述の構文規則 | 車の取扱説明書 |
| CLR | プログラムのコンパイルと実行 | 自動車のエンジン |
| FCL | 既製の機能を提供 | 自動車の部品倉庫 |
| .NET SDK | 開発ツールキット | 自動車工場全体 |
2. なぜC#を学ぶのか
- 市場での需要が高い:C#は常にプログラミング言語のトップ10にランクインしており、特にエンタープライズ分野やゲーム開発において圧倒的な存在感を示している
- 洗練された構文:C#は強力な型安全性を維持しつつ、簡潔な構文上の糖衣を継続的に導入しており、コードの可読性を高めています
- クロスプラットフォーム:.NET 5以降では、Windows、Linux、macOSの各プラットフォームが統合されました
- 充実したエコシステム:Visual Studio は最も強力な IDE の一つとして広く認知されており、NuGet では数十万ものサードパーティ製ライブラリが提供されています
- 初心者にもやさしい:強い型付けと包括的なコンパイラからのヒントにより、初心者はミスを減らし、短期間で上達できます
- 幅広いキャリアパス:ゲーム開発からエンタープライズアプリケーション、Webからモバイルまで――1つの言語でさまざまな分野をカバーできます
3. C#でできること
| ドメイン | 技術スタック | 説明 |
|---|---|---|
| ゲーム開発 | Unity + C# | Unityは、C#をスクリプト言語として採用している、世界で最も人気のあるゲームエンジンです |
| Webアプリケーション | ASP.NET Core | 高性能なWeb APIおよびMVCウェブサイト |
| エンタープライズアプリケーション | .NET + EF Core | ERPやCRMなどの大規模ビジネスシステム |
| モバイルアプリケーション | .NET MAUI / Xamarin | 1つのコードベースでAndroidとiOSの両方で動作 |
| デスクトップアプリケーション | WPF / WinForms | Windowsネイティブデスクトッププログラム |
| クラウドサービス | Azure + C# | Microsoftのクラウドエコシステムで推奨される言語 |
| IoT・組み込み | .NET nanoFramework | マイクロコントローラでのC#の実行 |
| 機械学習 | ML.NET | ネイティブ .NET 機械学習フレームワーク |
4. C#の主な特徴
(1) 型安全性
C# は強型付け言語です。コンパイラはプログラムの実行前に型の整合性をチェックするため、多くの種類のランタイムエラーを防ぐことができます。
▶ サンプル
int age = 25;
string name = "C#";
age = name;
これによりコンパイル時にエラーが発生します。つまり、string を int 変数に代入することはできません:
error CS0029: Cannot implicitly convert type 'string' to 'int'
(2) オブジェクト指向
C#は誕生当初からオブジェクト指向であり、カプセル化、継承、ポリモーフィズムという3つの基本原則をサポートしています。すべてがオブジェクトです。
▶ サンプル
class Animal
{
public string Name { get; set; }
public virtual void Speak() => Console.WriteLine($"{Name} makes a sound");
}
class Dog : Animal
{
public override void Speak() => Console.WriteLine($"{Name} says: Woof!");
}
var dog = new Dog { Name = "Buddy" };
dog.Speak();
Buddy says: Woof!
(3) クロスプラットフォーム
.NET 5以降では、従来の.NET Framework(Windows専用)と.NET Core(クロスプラットフォーム)が統合されました。これにより、1つのコードベースでWindows、Linux、macOS上で実行できるようになりました。
(4) 現代の構文の進化
C#はおよそ2年ごとにメジャーバージョンをリリースしており、関数型プログラミング、パターンマッチング、非同期プログラミングといった最新の言語機能を継続的に取り入れることで、言語の活力を維持しています。
5. C#の簡単な歴史
| バージョン | リリース年 | 主な機能 |
|---|---|---|
| C# 1.0 | 2002 | オブジェクト指向プログラミング(OOP)の基礎、クラス、インターフェース、デリゲート |
| C# 2.0 | 2005 | ジェネリック、匿名メソッド、Null許容型 |
| C# 3.0 | 2007 | LINQ、ラムダ式、拡張メソッド、自動プロパティ |
| C# 4.0 | 2010 | 動的バインディング、名前付きパラメータ、共変性/反変性 |
| C# 5.0 | 2012 | async/await による非同期プログラミング |
| C# 6.0 | 2015 | 文字列補間、null 条件演算子、例外フィルター |
| C# 7.0 | 2017 | パターンマッチング、タプル、ローカル関数 |
| C# 8.0 | 2019 | ヌル許容参照型、非同期ストリーム、インターフェースのデフォルトメソッド |
| C# 9.0 | 2020 | レコード型、トップレベル文、初期化アクセサ |
| C# 10.0 | 2021 | グローバルな using 宣言、ファイルスコープのネームスペース、定数文字列の補間 |
| C# 11.0 | 2022 | 生の文字列リテラル、リストパターン、必須修飾子 |
| C# 12.0 | 2023 | プライマリコンストラクタ、コレクション式、インライン配列 |
6. .NETエコシステムの進化
| 時代 | 名称 | 説明 |
|---|---|---|
| 2002年~2019年 | .NET Framework | Windowsのみ、バージョン4.8まで、新機能の追加なし |
| 2016年~2019年 | .NET Core | クロスプラットフォーム版への書き換え、1.0 → 2.0 → 3.1 |
| 2020 | .NET 5 | .NET Core と Mono を統合。混乱を避けるため、バージョン 4 をスキップ |
| 2021 | .NET 6 | 初のLTS(長期サポート)統合リリース |
| 2022 | .NET 7 | STS(標準サポート期間)リリース |
| 2023 | .NET 8 | 2回目のLTSリリース。本番環境での使用が推奨されます |
| 2024 | .NET 9 | 最新の STS リリース |
7. C# と他の言語の比較
| 特集 | C# | Java | C++ | Python |
|---|---|---|---|---|
| 型システム | 強型付け、型推論あり | 強型付け、記述が冗長 | 強型付け、より複雑 | 動的型付け |
| 実行 | JITコンパイル | JITコンパイル | ネイティブコンパイル | インタプリタ実行 |
| パフォーマンス | 高 | 高 | 最高 | 低 |
| 構文の進化 | 急速(2年ごとに新バージョンがリリースされる) | 緩やか(3~4年ごとに新バージョンがリリースされる) | 安定 | 適度 |
| クロスプラットフォーム | .NET 5+ | JVM | 再コンパイルが必要 | ネイティブサポート |
| ゲーム開発 | Unityの第一選択肢 | LibGDXなど | Unrealの第一選択肢 | スクリプト・補助ツール |
| メモリ管理 | 自動GC | 自動GC | 手動 | 自動GC |
| 学習の難易度 | 中 | 中 | 高 | 低 |
8. 初めてのC#プログラム
▶ サンプル
C# 9.0で導入されたトップレベル文を使えば、たった1行で済みます:
System.Console.WriteLine("Hello, World!");
Hello, World!
▶ サンプル
Main メソッドのエントリポイントを使用する従来のアプローチ(C# 9.0以前の標準的なスタイル):
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
Hello, World!
9. C#をマスターする方法
- 実践を重ねる:構文のポイントを1つ学ぶごとに、すぐにコードを書いて確認しましょう。ただ読むだけで練習を怠らないようにしましょう
- .NET ランタイムの理解:CLR がコードをコンパイル・実行する仕組みを学び、より効率的なプログラムを作成できるようになります
- Visual Studio を活用:IntelliSense、ブレークポイントによるデバッグ、プロファイリングツールにより、開発の生産性が大幅に向上します
- 公式ドキュメントを参照:Microsoft Learn が最も信頼できる情報源です
- 段階的に学ぶ:基本的な構文 → オブジェクト指向 → LINQ → 非同期プログラミング → 実務プロジェクト
❓ よくある質問
📖 まとめ
- C#は、マイクロソフトのアンダース・ヘイルスバーグによって設計され、2002年にリリースされ、.NETプラットフォーム上で動作する
- C# は幅広い分野で活用されています:ゲーム(Unity)、Web(ASP.NET Core)、デスクトップ(WPF)、モバイル(MAUI)、クラウド(Azure)
- 主な特徴:型安全性、オブジェクト指向、クロスプラットフォーム、そして絶えず進化し続ける構文
- .NETエコシステムは、.NET Frameworkから.NET 8 LTS/.NET 9へと進化し、クロスプラットフォームの統合を実現しました
- C#はJavaよりも進化が速く、C++よりも安全で、Pythonよりもパフォーマンスが高く、型付けもより厳格である
- 新規プロジェクトでは、トップレベルのステートメントを使用し、.NET 8 LTS を採用してください
📝 練習問題
- .NET SDK をインストールし、ターミナルで
dotnet new console -n MyFirstAppを実行してから、トップレベルのステートメントを使用して自分の名前と簡単な自己紹介を出力してください。 - 演習1のトップレベルの文を、従来の
Program.Mainスタイルで書き直し、2つのアプローチを比較する - LINQ(C# 3.0で導入された)とは何かを調査し、その目的を一文で要約してください