4.

C# 入門 — .NET エコシステムと現代の C# 言語

編集
この記事の要点
  • C# (シーシャープ) は Microsoft 製の汎用プログラミング言語。2000 年に登場、.NET プラットフォーム上で動作
  • Java 派生だが現代化が早く、records / pattern matching / async-await / nullable reference types / required members など最新機能を多数導入
  • 主要用途: Unity(ゲーム)、ASP.NET Core(Web)、WPF / WinForms / MAUI(デスクトップ・モバイル)、Blazor(C# で SPA)
  • 2026 年時点の安定版は C# 13 / .NET 9。LTS は .NET 8(2026 年 11 月までサポート)
  • 開発環境: Visual Studio 2022(Windows)、JetBrains Rider(クロスプラットフォーム)、VS Code + C# Dev Kit、CLI は dotnet コマンド、パッケージは NuGet

C# とは

C# は Anders Hejlsberg(Turbo Pascal / Delphi の作者)が主導して Microsoft で 2000 年に開発したプログラミング言語です。当初は Java の対抗馬として誕生しましたが、その後独自に進化し、.NET プラットフォーム(旧 .NET Framework、現在は .NET(旧 .NET Core))上で動作するマルチパラダイム言語として、Windows 開発・ゲーム開発・Web サーバーまで幅広く使われています。

項目内容
初版2000 年(C# 1.0)
設計者Anders Hejlsberg ほか Microsoft
最新版(2026 年)C# 13(.NET 9 同梱)
LTS バージョンC# 12 / .NET 8(2026 年 11 月まで)
動作環境.NET(Windows / Linux / macOS / iOS / Android / Web)
主な用途Web (ASP.NET Core)、ゲーム (Unity)、デスクトップ (WPF/MAUI)、業務 (WinForms)
ライセンス言語仕様: ECMA-334 標準。コンパイラ・ランタイム: MIT

.NET エコシステム

カテゴリ技術説明
ランタイム.NET 8 / 9クロスプラットフォーム(旧名 .NET Core)
ランタイム(旧).NET Framework 4.8Windows 専用、レガシー保守用
WebASP.NET Core / Minimal API / Razor Pages高速 Web フレームワーク
Web SPABlazor Server / WebAssemblyC# でフロントエンド
デスクトップWPF / WinForms / MAUI / AvaloniaGUI アプリ
モバイル.NET MAUIXamarin の後継、iOS/Android クロス開発
ゲームUnity / Godot (C# モード)業界標準のゲームエンジン
クラウドAzure Functions / Container Appsサーバーレス・PaaS
ORMEntity Framework Core / Dapperデータアクセス
パッケージNuGet1 万種以上のライブラリ

Hello World

// .NET 6+ の最上位ステートメント(Program.cs 1 行で動く)
Console.WriteLine("Hello, C# 13!");

// 従来の書き方(クラス・Main 必須)
using System;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}
# プロジェクト作成・実行
dotnet new console -n MyApp
cd MyApp
dotnet run

# Web API プロジェクト
dotnet new webapi -n MyApi
dotnet run

# NuGet パッケージ追加
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

現代的な C# の機能

// records (C# 9+) : 値オブジェクト
public record Person(string Name, int Age);
var p1 = new Person("Yamada", 30);
var p2 = p1 with { Age = 31 };  // イミュータブル更新

// パターンマッチ (C# 8+ / 強化 C# 11+)
string Describe(object o) => o switch
{
    int n when n > 0 => $"正の整数 {n}",
    string s => $"文字列 {s}",
    null => "null",
    _ => "その他"
};

// nullable reference types (C# 8+)
#nullable enable
string name = null;       // ⚠️ 警告: 非 null 型に null
string? maybe = null;     // ✅ ? が null 許容
int len = maybe.Length;   // ⚠️ 警告
int len2 = maybe?.Length ?? 0;  // ✅ null 安全

// 非同期 async/await
public async Task FetchAsync(string url)
{
    using var client = new HttpClient();
    return await client.GetStringAsync(url);
}

// required members (C# 11+)
public class User
{
    public required string Email { get; init; }
    public string? Name { get; init; }
}
var u = new User { Email = "a@b.co" };  // Email 必須

// プライマリコンストラクタ (C# 12)
public class Repo(DbContext db)
{
    public User Find(int id) => db.Users.Find(id);
}

// コレクション式 (C# 12)
int[] nums = [1, 2, 3, 4, 5];
List list = [..nums, 6, 7];

LINQ — データ操作の決定打

using System.Linq;

var users = new[] {
    new { Name = "Yamada", Age = 30 },
    new { Name = "Tanaka", Age = 25 },
    new { Name = "Suzuki", Age = 40 },
};

// メソッド構文
var adults = users
    .Where(u => u.Age >= 30)
    .OrderByDescending(u => u.Age)
    .Select(u => u.Name)
    .ToList();
// → ["Suzuki", "Yamada"]

// クエリ構文(SQL 風)
var q = from u in users
        where u.Age >= 30
        orderby u.Age descending
        select u.Name;

// EF Core でデータベース操作
var posts = await db.Posts
    .Where(p => p.PublishedAt < DateTime.Now)
    .Include(p => p.Author)
    .OrderByDescending(p => p.PublishedAt)
    .Take(10)
    .ToListAsync();

C# と Java の違い

機能C#Java
プロパティ{ get; set; } 標準getter/setter メソッド手書き or Lombok
構造体あり (struct, 値型)なし(record class はある)
delegate / event言語機能Functional Interface で代用
LINQ言語統合Stream API(やや冗長)
async/await言語機能CompletableFuture / Virtual Threads
null 安全nullable reference typesOptional / アノテーション
extension methodありなし(Kotlin にはある)
マルチプラットフォーム.NET 8+ で完全対応JVM が動く環境全て

用途別の C#

用途ライブラリ・フレームワーク
Web アプリ・APIASP.NET Core / Minimal API
SPABlazor WebAssembly
デスクトップ (Win)WPF / WinUI 3 / Avalonia (クロス)
モバイルアプリ.NET MAUI
ゲームUnity(業界デファクト)
業務システム (Win)WinForms(保守)/ WPF
クラウド・サーバーレスAzure Functions, AWS Lambda (.NET)
IoT / 組込.NET nanoFramework
機械学習ML.NET

FAQ

Q: .NET Framework と .NET(旧 Core)の違いは?
A: .NET Framework は Windows 専用・最終版 4.8。.NET(旧 Core)はクロスプラットフォーム・モダン。新規開発は.NET 8/9一択。

Q: Unity を使うだけでも C# を本格的に学ぶべき?
A: Unity の C# は実行環境 (Mono/IL2CPP) が特殊で、async/await や最新文法に一部制限あり。基礎は身につけて損なし。

Q: Visual Studio と Rider どちらが良い?
A: Windows + 大規模 .NET なら Visual Studio。Mac/Linux でも快適に書きたいなら Rider(有償)or VS Code + C# Dev Kit(無償)。

編集
Post Share
子ページ
  1. 文法
  2. エラー一覧
同階層のページ
  1. Java
  2. PHP
  3. Python
  4. C#
  5. C++
  6. Ruby
  7. Go
  8. HTML
  9. CSS
  10. JavaScript
  11. TypeScript
  12. VBA
  13. Google Apps Script
  14. Julia
  15. Swift
  16. オブジェクト指向言語共通
  17. Gen