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#を学ぶのか


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# は強型付け言語です。コンパイラはプログラムの実行前に型の整合性をチェックするため、多くの種類のランタイムエラーを防ぐことができます。

▶ サンプル

CSHARP
int age = 25;
string name = "C#";
age = name;
▶ 試してみよう

これによりコンパイル時にエラーが発生します。つまり、stringint 変数に代入することはできません:

TEXT 📖 参照専用
error CS0029: Cannot implicitly convert type 'string' to 'int'

(2) オブジェクト指向

C#は誕生当初からオブジェクト指向であり、カプセル化、継承、ポリモーフィズムという3つの基本原則をサポートしています。すべてがオブジェクトです。

▶ サンプル

CSHARP
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();
▶ 試してみよう
TEXT 📖 参照専用
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 リリース
💡 ヒント: 新規プロジェクトでは、.NET 8 LTS を優先してください。最新の機能を利用したい場合は、.NET 9 を試してみてください。レガシープロジェクトの保守を行う場合を除き、.NET Framework の使用は避けてください。


7. C# と他の言語の比較

特集 C# Java C++ Python
型システム 強型付け、型推論あり 強型付け、記述が冗長 強型付け、より複雑 動的型付け
実行 JITコンパイル JITコンパイル ネイティブコンパイル インタプリタ実行
パフォーマンス 最高
構文の進化 急速(2年ごとに新バージョンがリリースされる) 緩やか(3~4年ごとに新バージョンがリリースされる) 安定 適度
クロスプラットフォーム .NET 5+ JVM 再コンパイルが必要 ネイティブサポート
ゲーム開発 Unityの第一選択肢 LibGDXなど Unrealの第一選択肢 スクリプト・補助ツール
メモリ管理 自動GC 自動GC 手動 自動GC
学習の難易度
⚠️ 注意: C#とJavaの構文は非常に似ていますが、C#はより急速に進化しており、LINQ、async/await、プロパティ、演算子のオーバーロードなど、Javaには長らく欠けていた機能を備えています。C++と比較すると、C#は最高のパフォーマンスを多少犠牲にする代わりに、安全性と開発者の生産性を重視しています。 Pythonと比較すると、C#はコンパイル型で厳格な型付けがされているため、大規模なプロジェクトでのメンテナンスが容易です。


8. 初めてのC#プログラム

▶ サンプル

C# 9.0で導入されたトップレベル文を使えば、たった1行で済みます:

CSHARP
System.Console.WriteLine("Hello, World!");
▶ 試してみよう
TEXT 📖 参照専用
Hello, World!

▶ サンプル

Main メソッドのエントリポイントを使用する従来のアプローチ(C# 9.0以前の標準的なスタイル):

CSHARP
using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}
▶ 試してみよう
TEXT 📖 参照専用
Hello, World!
💡 ヒント: どちらのアプローチも機能的には同じです。新しいプロジェクトでは、簡潔さを重視してトップレベルの記述を優先すべきです。従来のスタイルを理解しておくと、古いコードを読んだり、オブジェクト指向の構造を学んだりするときに役立ちます。


9. C#をマスターする方法

❓ よくある質問

Q C#と.NETの関係はどのようなものですか?
A C#はプログラミング言語であり、.NETはランタイムプラットフォームです。 C#のコードは、まるで車(C#)が走るために道路(.NET)を必要とするのと同じように、.NETのCLR上でコンパイルされ、実行されます。
Q C#を学ぶにはWindowsが必要ですか?
A いいえ。.NET 5以降ではLinuxやmacOSもサポートされており、VS CodeとC# Dev Kitを使えば、完全なクロスプラットフォーム開発環境が整います。
Q .NET Frameworkと.NET 8の違いは何ですか?
A .NET Frameworkは、Windows専用の旧バージョンであり、新機能の開発は行われていません。一方、.NET 8は最新のクロスプラットフォーム対応のLTSリリースであり、すべての新規プロジェクトで推奨されています。
Q UnityのC#は標準のC#と同じですか?
A 構文は同じですが、UnityはMono/.NET Standardのサブセット上で動作するため、C#の新しい機能の一部はまだサポートされていない場合があります。また、Unityにはゲーム専用のAPIが多数用意されています。

📖 まとめ

📝 練習問題

  1. .NET SDK をインストールし、ターミナルで dotnet new console -n MyFirstApp を実行してから、トップレベルのステートメントを使用して自分の名前と簡単な自己紹介を出力してください。
  2. 演習1のトップレベルの文を、従来のProgram.Mainスタイルで書き直し、2つのアプローチを比較する
  3. LINQ(C# 3.0で導入された)とは何かを調査し、その目的を一文で要約してください
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%