1.概要
2020年8月8日研究発表で簡単には説明したC#言語バージョンの落ち穂拾い
別紙の表について、手元にあるVS2008、VS2019、VS2022では実際に確認
バージョン変遷
リリース年 | C#言語 | VisualStudio | .NET Framework | .NET (Core) | 言語的なトピック |
---|---|---|---|---|---|
2002年 | C#1.0 | VS .NET 2002 | .NET Framework1.0 | class、struct、interface、event、演算子および式、デリゲート、プロパティ、ステートメント、属性 | |
2003年 | C#1.2 | VS .NET 2003 | .NET Framework1.1 | ドキュメントコメント(/** */)、foreach最適化 | |
2005年 | C#2.0 | VS2005 | .NET Framework2.0/3.0 | ジェネリック(型パラメータ)、部分クラス(partial)、匿名メソッド(delegate)、null許容型、反復子(yield)、共変性・反変性(デリゲート型推論) | |
2007年 | C#3.0 | VS2008 | .NET Framework3.5 | 自動実装プロパティ、クエリ式(LINQ)、匿名型、ラムダ式、拡張メソッド、式ツリー、暗黙的に型指定されるローカル変数、部分メソッド、オブジェクト初期化子とコレクション初期化子 | |
2010年 | C#4.0 | VS2010 | .NET Framework4 | dynamic(動的型付け変数)、オプション引数・名前付き引数、ジェネリックの共変性・反変性、埋め込まれた相互運用機能型 | |
2012年 | C#5.0 | VS2012/2013 | .NET Framework4.5 .NET Framework4.5.1(VS2013) | 非同期メンバー(async/await)、呼び出し元情報属性(Caller info) | |
2015年 | C#6.0 | VS2015 | .NET Framework4.6 | 静的インポート(using static)、自動実装プロパティの機能強化、ラムダ式本体によるメンバーの記述、自動プロパティ初期化子、文字列補間、null条件演算子、nameof演算子、例外フィルター(when) | |
2017年 | C#7.0 | VS2017 | ↓ | .NET Core1.0 | outパラメーター付き引数での変数宣言、タプル、タプルを要素ごとの変数として受け取る分解、パターンマッチング、ローカル関数、式形式メンバーの拡張、refローカル変数と戻り値 |
2017年 | C#7.1 | VS2017(15.3) | .NET Framework4.7 | .NET Core2.0 | タプル要素の名前の推論、ジェネリック型に対する型スイッチの強化、非同期Mainメソッド、defaultリテラル式 |
2017年 | C#7.2 | VS2017(15.5) | .NET Framework4.7.1 | .NET Core2.0 | 名前付き引数の入力緩和、private protected、ref関連(readonly、三項演算子、拡張メソッドの引数)、readonly struct、Span<T>を用いたunsafeなしのstackalloc、数値リテラルの「0x」「0b」の直後にも「_」を入力可能 |
2018年 | C#7.3 | VS2017(15.7) | .NET Framework4.8 | .NET Core2.x | タプルの==,!=比較、式中の変数宣言、refの再代入、ジェネリック型引数に対するEnum,Delegate,unmanaged制約、オーバーロード解決の改善、stackalloc初期化子、ユーザー定義型のfixedステートメント利用、自動プロパティのバックフィールドに対するfield属性指定 |
2019年 | C#8.0 | VS2019(16.3) | ↓ | .NET Core3.x | 範囲アクセス(a[i..j])、既定のインターフェイスメソッド、using変数宣言、Dispose()が実装されていればref構造体でもusingを使用可能、パターンマッチング強化、null許容参照型、非同期ストリーム(await foreach, await using, 非同期メソッド内でのyield)、staticなローカル関数、アンマネージなジェネリック構造体、readonly関数メンバ、式中のstackalloc |
2020年 | C#9.0 | VS2019(16.8) | ↓ | .NET 5.0 | record型、init専用プロパティ、トップレベルステートメント、パターンマッチング強化、クラスの共変戻り値、関数ポインター、native int、ラムダ式引数のdiscard、staticな匿名関数、ローカル関数のAttribute、GetEnumrator()を実装することでforeachを使えるようにする、コードジェネレータサポート |
2021年 | C#10 | VS2022 | ↓ | .NET 6.0 | record struct型、文字列補間強化、global using、波括弧無しのnamespace、CallerArgumentExpression、ラムダ式の強化 |
2022年 | C#11 | VS2022(17.4) | .NET Framework4.8.1 | .NET 7.0 | 文字列リテラルの強化(utf-8、生文字、文字列補間中の改行)、汎用クラスのAttribute、required修飾子、fileローカル型、パターンマッチング強化 |
2023年? | C#12 | ? | ? | .NET 8.0? | (プレビュー段階)プライマリコンストラクタ、ラムダ式引数の既定値、任意の型の別名指定、インターセプター |
話すことメモ
基本的には、C#言語のバージョンはVisual Studioと一蓮托生
・ただし、対象となる.NET Frameworkまたは.NET Coreのバージョンについては同期していないため案件によって確認したほうが良い
・VS2015まではVisual Studioのバージョンアップとともに.NET Frameworkのバージョンが上がっている
・一方、Visual Studio2017以降は.NET Frameworkのバージョンは据え置きのまま、言語拡張されている
.NET Frameworkと.NET Coreの区別
・.NET Frameworkと.NET Coreは別物
・標準関数などは同じものもあるが、移植は必要。例えばVS2019で作成したソリューションをVS2022で開く時。
→参考「.NET Framework から .NET への移植の概要」
・.NET Frameworkはバグフィクスを除き、今後更新されない
・.NET Coreのバージョン4は存在しない
・.NET Coreはバージョン5から名称に「Core」を付けなくなった
息が長い言語なので、バージョンによってはプログラムソースの書き方ががらっと変わる
(参考ページ)
「C# 12 の新機能」
「C# 11 の新機能」
「C# 10 の新機能」
「C# 9.0 の新機能」
「C# の歴史」
「C# 言語のバージョン管理」
「開発者向けの .NET Framework のインストール」
「C Sharp (programming language) Versions」
「C# によるプログラミング入門」
「Visual Studioの各バージョンが実装するC#のバージョン」
コメント