C#/.NET

C#/.NETとは

C# は Microsoft が開発した静的型付けのオブジェクト指向言語、.NET はその実行基盤(ランタイムと標準ライブラリ)です。言語だけを指して C#、実行環境まで含めて .NET と呼び分けます。

using System;

class Program
{
    static void Main() => Console.WriteLine("Hello, C#");
}

かつては Windows 専用でしたが、現在の .NET は Linux・macOS でも動くクロスプラットフォームの基盤です。Web API、CLIツール、デスクトップアプリ、そして Unity のゲームロジックが同じ言語で書けます。

Javaとの関係

[[Java]] とは文法・実行モデルがよく似ています。どちらも中間コードへコンパイルしてランタイム上で動かし、ガベージコレクションでメモリを管理します。違いが出るのは言語機能の追加ペースです。

機能C#での位置づけ
プロパティフィールドへの読み書きをメソッドとして書ける構文
LINQコレクションやDBへの問い合わせを言語構文で書く仕組み
async/await非同期処理の標準構文。C#が先行して普及させた
null許容参照型参照が null になりうるかを型で表し、コンパイラが警告する

async / await は [[TypeScript]] や他の言語にも広がった書き方で、もともと C# 由来です。非同期処理を同期処理と同じ見た目で書けるため、待ち時間の多いAPI呼び出しを素直に表現できます。

var user = await client.GetUserAsync(id); // 待っている間スレッドを占有しない

Unityとゲーム開発

ゲームエンジン Unity は、ゲームロジックを C# で記述します。エンジン本体は C++ ですが、開発者が書くのはほぼ C# です。

  • オブジェクトの振る舞いをコンポーネントとして書き、シーン上のオブジェクトへ割り当てる
  • 毎フレーム呼ばれる更新処理と、イベント駆動の処理を組み合わせる
  • [[デザインパターン]] のうち、状態遷移やオブジェクトの生成にまつわるものが実務でよく登場する

Web バックエンドとゲーム開発という離れた領域で同じ言語が使えるため、片方で覚えた文法がそのまま活きます。

初学者向けポイント

  • 開発環境は Visual Studio か Visual Studio Code が標準的です。どちらも補完・デバッガが最初から揃っています
  • プロジェクト作成・ビルド・テストは dotnet コマンドに統一されています(dotnet new・dotnet build・dotnet test)
  • [[自動テスト]] のフレームワークは xUnit や NUnit が定番で、テンプレートから雛形を作れます
  • 型が厳しい分、コンパイル時に気づけるミスが多い言語です。まずは null 許容参照型の警告を無視せず潰す習慣をつけると安全に書けます

関連技術とのつながり

  • [[Java]] — 文法・実行モデルが近く、片方を知っていれば移行しやすい
  • [[TypeScript]] — async / await など、C#由来の構文を共有している
  • [[デザインパターン]] — Unity のゲームロジックでも定石として登場する
  • [[自動テスト]] — dotnet test で xUnit / NUnit を標準的に実行できる
  • [[Unityゲーム開発基礎]] — C# を書く側から見たエンジンの構造。シーンとコンポーネントで組み立てる
Q: C#と.NETの関係として正しいものはどれ?
- [x] C#は言語、.NETは実行基盤(ランタイムと標準ライブラリ)
- [ ] C#は.NETの旧名称
- [ ] .NETはC#専用のエディタ
解説: 言語そのものが C#、それを動かすランタイムと標準ライブラリを含む基盤が .NET です。

Q: Unityでゲームロジックを書くときに使う言語はどれ?
- [ ] JavaScript
- [x] C#
- [ ] Python
解説: Unity のエンジン本体は C++ ですが、開発者が書くゲームロジックは C# です。

Q: 現在の.NETが動作する環境として正しいものはどれ?
- [ ] Windowsのみ
- [x] Windows・Linux・macOS
- [ ] ブラウザのみ
解説: 現在の .NET はクロスプラットフォームで、Linux や macOS 上でも動作します。