Más contenido relacionado C#101. / 46
C# 10 のおすすめ新機能
1
【オンライン】VISUAL STUDIO 2022 LAUNCH 記念 C# TOKYO イベント
2021年11月19日
石崎 充良
2. / 46
自己紹介
石崎 充良 ( @mishi_cs )
C# Tokyo コミュニティ管理メンバー
GitHub:
https://github.com/m-ishizaki
blog:
https://rksoftware.hatenablog.com/
2
4. / 46
C# 7・8・9・10 の歴史
C# リリース ターゲット フレームワーク
7 2017/03 .NET Framework
8 2019/09 .NET Core 3.0
9 2020/11 .NET 5
10 2021/11 .NET 6
4
5. / 46
C# 10 の新機能一覧 (提案一覧)
5
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/proposals/csharp-9.0/records など
6. / 46
C# 10 の新機能一覧 (提案一覧)
6
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/record-structs など
日本語機能名 英語 リンク
レコード構造体 Record structs リンク
パラメーターなしの構造体コンストラク
ター
Parameterless struct constructors リンク
グローバルな using ディレクティブ Global using directive リンク
ファイル スコープの名前空間 File scoped namespaces リンク
拡張プロパティのパターン Extended property patterns リンク
補間された文字列の改善 Improved interpolated strings リンク
定数の補間文字列 Constant interpolated strings リンク
ラムダの機能強化 Lambda improvements リンク
ラムダ属性 [ 該当ページなし ] [ 該当ページなし ]
呼び出し元の引数の式 Caller argument expression リンク
強化された #line ディレクティブ Enhanced #line directives リンク
汎用属性 Generic attributes リンク
明確な代入分析の改善 Improved definite assignment analysis リンク
AsyncMethodBuilder のオーバーライド AsyncMethodBuilder override リンク
ラムダ機能強化で
言及されている
7. / 46
C# 10 の新機能一覧 (提案一覧)
7
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/record-structs など
日本語機能名 英語 リンク
レコード構造体 Record structs リンク
パラメーターなしの構造体コンストラク
ター
Parameterless struct constructors リンク
グローバルな using ディレクティブ Global using directive リンク
ファイル スコープの名前空間 File scoped namespaces リンク
拡張プロパティのパターン Extended property patterns リンク
補間された文字列の改善 Improved interpolated strings リンク
定数の補間文字列 Constant interpolated strings リンク
ラムダの機能強化 Lambda improvements リンク
ラムダ属性 [ 該当ページなし ] [ 該当ページなし ]
呼び出し元の引数の式 Caller argument expression リンク
強化された #line ディレクティブ Enhanced #line directives リンク
汎用属性 Generic attributes リンク
明確な代入分析の改善 Improved definite assignment analysis リンク
AsyncMethodBuilder のオーバーライド AsyncMethodBuilder override リンク
超! 人気の機能
誰もがすぐに使いこなしだす
ライブラリ作成者など
誰もが触る機能ではない
8. / 46
8
レコード構造体
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
14. / 46
14
パラメーターなしの構造体コンストラク
ター
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
18. / 46
18
グローバルな using ディレクティブ
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
19. / 46
グローバルな using ディレクティブ
一つのファイルで using すると全てのファ
イルで using したものとなる
19
Class1 とは別のファイルに
書かれているソースコード
System.Text.StringBuilder クラス
が名前空間なしで使えている
using の前に global とつける
20. / 46
暗黙的なグローバルな using ディレクティブ
.NET 6 のプロジェクトでは何もしなくても
使えてしまう名前空間がある
20
これまでであれば
using System;
using System.Ling;
が必要なコード
.NET 6 で作ったプロジェクトでは
using なしで使えてしまう
便利ではあるが破壊的変更
※独自の Console クラスや FirstOrDefault メソッドを作っていたら…
21. / 46
暗黙的なグローバルな using ディレクティブ
暗黙的なグローバルな using は無効にでき
る
21
.csproj ファイルの
ImplicitUsings プロパティを消
す
または、
DisableImplicitNamespaceImports
プロパティを設定する
23. / 46
23
ファイル スコープの名前空間
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
25. / 46
25
拡張プロパティのパターン
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
27. / 46
27
補間された文字列の改善
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
30. / 46
30
定数の補間文字列
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
32. / 46
32
ラムダの機能強化
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
34. / 46
34
呼び出し元の引数の式
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
36. / 46
36
強化された #line ディレクティブ
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
37. / 46
強化された #line ディレクティブ
#line ディレクティブで Razor などで正し
いソースコードのマッピングを取れなかっ
たものが取れるようになる
37
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/async-method-builders
38. / 46
38
汎用属性
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
40. / 46
40
明確な代入分析の改善
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
42. / 46
42
AsyncMethodBuilder のオーバーライド
•レ コ ー ド 構 造 体
•パ ラ メ ー タ ー な し の 構 造 体 コ ン ス ト ラ ク タ ー
•グ ロ ー バ ル な u s i n g デ ィ レ ク テ ィ ブ
•フ ァ イ ル ス コ ー プ の 名 前 空 間
•拡 張 プ ロ パ テ ィ の パ タ ー ン
•補 間 さ れ た 文 字 列 の 改 善
•定 数 の 補 間 文 字 列
•ラ ム ダ の 機 能 強 化
•呼 び 出 し 元 の 引 数 の 式
•強 化 さ れ た # l i n e デ ィ レ ク テ ィ ブ
•汎 用 属 性
•明 確 な 代 入 分 析 の 改 善
•A s y n c M e t h o d B u i l d e r の オ ー バ ー ラ イ ド
43. / 46
AsyncMethodBuilder のオーバーライド
非同期メソッド (async メソッド) をコンパイル
したときに使われる AsyncMethodBuilder のカ
スタマイズができる
43
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/async-method-builders
45. / 46
C# 10 の新機能一覧 (提案一覧)
45
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/record-structs など
日本語機能名 英語 リンク
レコード構造体 Record structs リンク
パラメーターなしの構造体コンストラク
ター
Parameterless struct constructors リンク
グローバルな using ディレクティブ Global using directive リンク
ファイル スコープの名前空間 File scoped namespaces リンク
拡張プロパティのパターン Extended property patterns リンク
補間された文字列の改善 Improved interpolated strings リンク
定数の補間文字列 Constant interpolated strings リンク
ラムダの機能強化 Lambda improvements リンク
ラムダ属性 [ 該当ページなし ] [ 該当ページなし ]
呼び出し元の引数の式 Caller argument expression リンク
強化された #line ディレクティブ Enhanced #line directives リンク
汎用属性 Generic attributes リンク
明確な代入分析の改善 Improved definite assignment analysis リンク
AsyncMethodBuilder のオーバーライド AsyncMethodBuilder override リンク
超! 人気の機能
誰もがすぐに使いこなしだす
ライブラリ作成者など
誰もが触る機能ではない