Start Debugging
JA

C# 言語のバージョン履歴

C# の進化により、モダンで高パフォーマンスな言語へと変貌を遂げました。本ガイドはあらゆる主要なマイルストーンを追跡します。初期 (C# 1.0 - 1.2)。C# は 2002 年に .NET Framework の主要言語として登場しました。Java に似ていましたが、Windows 開発に焦点を当てていました。バージョン 1.2 はその後すぐに小さな...

このサイトでは、AI エージェントの Walter を調査、執筆、保守に使用しています。 制作と検証の方法

C# の進化により、モダンで高パフォーマンスな言語へと変貌を遂げました。本ガイドはあらゆる主要なマイルストーンを追跡します。

初期 (C# 1.0 – 1.2)

C# は 2002 年に .NET Framework の主要言語として登場しました。Java に似ていましたが、Windows 開発に焦点を当てていました。バージョン 1.2 はその後すぐに、foreach ループでの IDisposable サポートのような小さな改善を伴って登場しました。

この言語には次のような目標がありました:

  • シンプルで、モダンで、汎用的かつオブジェクト指向のプログラミング言語であることを意図しています。
  • 強い型検査、配列の境界検査、未初期化変数を使用しようとする試みの検出、ソースコードのポータビリティ、自動ガベージコレクションを含むべきです。
  • 分散環境を活用できるソフトウェアコンポーネントの開発に使用することを意図しています。
  • プログラマのポータビリティは非常に重要であるため、特に C と C++ にすでに慣れているプログラマにとって、C# が最適です。
  • 国際化のサポートを提供すること。これは非常に重要でした。
  • ホスト型システムと組み込みシステムの両方に向けたアプリケーションを書くのに適していることを意図しています。

出典: C# の設計目標

大きな生産性のシフト (C# 2.0 – 5.0)

これらのバージョンは、私たちが今日最もよく使用する機能を導入しました。

  • C# 2.0: ジェネリクス、無名メソッド、null 許容型がデータの扱い方を変えました。
  • C# 3.0: LINQ、ラムダ式、拡張メソッドによりデータのクエリがはるかに容易になりました。
  • C# 4.0: このバージョンは dynamic キーワードと省略可能パラメーターを追加しました。
  • C# 5.0: async と await キーワードが非同期プログラミングに革命をもたらしました。

モダンコンパイラの時代 (C# 6.0 – 9.0)

Roslyn コンパイラにより、更新がより高速かつ頻繁になりました。

  • C# 6.0 および 7.0: これらのバージョンは、式形式メンバーやタプルなどの「構文糖」に焦点を当てました。
  • C# 8.0: null 許容参照型は、よくある null 参照例外を避けるのに役立ちました。
  • C# 9.0: レコード型とトップレベルステートメントがデータモデリングを単純化し、ボイラープレートコードを削減しました。

最近の進化 (C# 10.0 – 13.0)

この言語は今や .NET と並んで毎年進化しています。

  • C# 10 と 11: グローバル using ディレクティブと生文字列リテラルが開発者の生産性を向上させました。
  • C# 12 と 13: クラスのプライマリコンストラクターと ref struct の改善が、言語の競争力を保ちました。

C# 14 の新機能

.NET 10 と共にリリースされた C# 14 は、いくつかの生活の質を向上させる改善を導入します。

field キーワード

プロパティのバッキングフィールドを手動で宣言する必要がなくなりました。field キーワードを使えば、アクセサ内でコンパイラ生成のフィールドに直接アクセスできます。

public string Name { 
    get => field; 
    set => field = value ?? "Unknown"; 
}

拡張メンバー

C# 14 は拡張メソッドを拡張します。新しい extension ブロック内で、拡張プロパティ、静的メンバー、さらには演算子まで定義できるようになりました。

その他の主要な機能

  • Null 条件付き代入: ターゲットが null でない場合にのみ値を代入するには ?.= を使用します。
  • 暗黙的な Span 変換: 配列や文字列がより自然に span に変換されるようになりました。
  • ラムダ修飾子: 明示的な型なしでラムダパラメーターに ref、in、out を使用できます。
  • 部分コンストラクター: ソースジェネレーターが、部分クラスのコンストラクターのシグネチャを定義できるようになりました。

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.