朝会発表テーマ

C#/VisualStudio/.NETバージョン変遷

1.概要

2020年8月8日研究発表で簡単には説明したC#言語バージョンの落ち穂拾い
別紙の表について、手元にあるVS2008、VS2019、VS2022では実際に確認

バージョン変遷

リリース年C#言語VisualStudio.NET Framework.NET (Core)言語的なトピック
2002年C#1.0VS .NET 2002.NET Framework1.0class、struct、interface、event、演算子および式、デリゲート、プロパティ、ステートメント、属性
2003年C#1.2VS .NET 2003.NET Framework1.1ドキュメントコメント(/** */)、foreach最適化
2005年C#2.0VS2005.NET Framework2.0/3.0ジェネリック(型パラメータ)、部分クラス(partial)、匿名メソッド(delegate)、null許容型、反復子(yield)、共変性・反変性(デリゲート型推論)
2007年C#3.0VS2008.NET Framework3.5自動実装プロパティ、クエリ式(LINQ)、匿名型、ラムダ式、拡張メソッド、式ツリー、暗黙的に型指定されるローカル変数、部分メソッド、オブジェクト初期化子とコレクション初期化子
2010年C#4.0VS2010.NET Framework4dynamic(動的型付け変数)、オプション引数・名前付き引数、ジェネリックの共変性・反変性、埋め込まれた相互運用機能型
2012年C#5.0VS2012/2013.NET Framework4.5
.NET Framework4.5.1(VS2013)
非同期メンバー(async/await)、呼び出し元情報属性(Caller info)
2015年C#6.0VS2015.NET Framework4.6静的インポート(using static)、自動実装プロパティの機能強化、ラムダ式本体によるメンバーの記述、自動プロパティ初期化子、文字列補間、null条件演算子、nameof演算子、例外フィルター(when)
2017年C#7.0VS2017.NET Core1.0outパラメーター付き引数での変数宣言、タプル、タプルを要素ごとの変数として受け取る分解、パターンマッチング、ローカル関数、式形式メンバーの拡張、refローカル変数と戻り値
2017年C#7.1VS2017(15.3).NET Framework4.7.NET Core2.0タプル要素の名前の推論、ジェネリック型に対する型スイッチの強化、非同期Mainメソッド、defaultリテラル式
2017年C#7.2VS2017(15.5).NET Framework4.7.1.NET Core2.0名前付き引数の入力緩和、private protected、ref関連(readonly、三項演算子、拡張メソッドの引数)、readonly struct、Span<T>を用いたunsafeなしのstackalloc、数値リテラルの「0x」「0b」の直後にも「_」を入力可能
2018年C#7.3VS2017(15.7).NET Framework4.8.NET Core2.xタプルの==,!=比較、式中の変数宣言、refの再代入、ジェネリック型引数に対するEnum,Delegate,unmanaged制約、オーバーロード解決の改善、stackalloc初期化子、ユーザー定義型のfixedステートメント利用、自動プロパティのバックフィールドに対するfield属性指定
2019年C#8.0VS2019(16.3).NET Core3.x範囲アクセス(a[i..j])、既定のインターフェイスメソッド、using変数宣言、Dispose()が実装されていればref構造体でもusingを使用可能、パターンマッチング強化、null許容参照型、非同期ストリーム(await foreach, await using, 非同期メソッド内でのyield)、staticなローカル関数、アンマネージなジェネリック構造体、readonly関数メンバ、式中のstackalloc
2020年C#9.0VS2019(16.8).NET 5.0record型、init専用プロパティ、トップレベルステートメント、パターンマッチング強化、クラスの共変戻り値、関数ポインター、native int、ラムダ式引数のdiscard、staticな匿名関数、ローカル関数のAttribute、GetEnumrator()を実装することでforeachを使えるようにする、コードジェネレータサポート
2021年C#10VS2022.NET 6.0record struct型、文字列補間強化、global using、波括弧無しのnamespace、CallerArgumentExpression、ラムダ式の強化
2022年C#11VS2022(17.4).NET Framework4.8.1.NET 7.0文字列リテラルの強化(utf-8、生文字、文字列補間中の改行)、汎用クラスのAttribute、required修飾子、fileローカル型、パターンマッチング強化
2023年?C#12.NET 8.0?(プレビュー段階)プライマリコンストラクタ、ラムダ式引数の既定値、任意の型の別名指定、インターセプター
※リリース年は、日本語版は翌年の場合あり/(Visual Studioで使用可能な.NETのバージョン)/(太字は個人的に興味深い言語機能)

話すことメモ

基本的には、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 6 に移植する - .NET Core
移植プロセスを理解し、.NET Framework プロジェクトを .NET 6 に移植する際に役立つツールを確認します。

・.NET Frameworkはバグフィクスを除き、今後更新されない
・.NET Coreのバージョン4は存在しない
・.NET Coreはバージョン5から名称に「Core」を付けなくなった

息が長い言語なので、バージョンによってはプログラムソースの書き方ががらっと変わる

(参考ページ)

「C# 12 の新機能」

C# 12 の新機能 - C# ガイド - C#
C# 12 での新機能の概要を説明します。

「C# 11 の新機能」

C# 11 の新機能 - C# ガイド - C#
C# 11 で追加された新機能の概要を説明します。

「C# 10 の新機能」

C# 10 の新機能 - C# ガイド - C#
C# 10 で使用できる新しい機能の概要を説明します。

「C# 9.0 の新機能」

C# の歴史
C# 言語が数多くのリリースを経て、どのように変化してきたかを学びましょう。 言語に異なる機能が導入されたタイミングについて説明します。

「C# の歴史」

C# の歴史
C# 言語が数多くのリリースを経て、どのように変化してきたかを学びましょう。 言語に異なる機能が導入されたタイミングについて説明します。

「C# 言語のバージョン管理」

言語バージョンの構成 - C# reference
既定の C# 言語バージョンを手動でオーバーライドする方法について説明します。

「開発者向けの .NET Framework のインストール」

.NET Framework Developer Pack または再頒布可能パッケージをインストールするには - .NET Framework
開発者は、.NET Framework 開発者パックとターゲット パックをダウンロードしてインストールすることができます。 ご自分のアプリに .NET Framework 再頒布可能パッケージを含めることができます。

「C Sharp (programming language) Versions」

C Sharp (programming language) - Wikipedia

「C# によるプログラミング入門」

C# によるプログラミング入門
C# によるプログラミング入門です。C# 初心者の方はもちろん、これからプログラミングを始めようという方も対象としています。

「Visual Studioの各バージョンが実装するC#のバージョン」

Visual Studioの各バージョンが実装するC#のバージョン

コメント