Successfully reported this slideshow.
Your SlideShare is downloading. ×

Ad

/ 46
C# 10 のおすすめ新機能
1
【オンライン】VISUAL STUDIO 2022 LAUNCH 記念 C# TOKYO イベント
2021年11月19日
石崎 充良

Ad

/ 46
自己紹介
石崎 充良 ( @mishi_cs )
C# Tokyo コミュニティ管理メンバー
GitHub:
https://github.com/m-ishizaki
blog:
https://rksoftware.hatenab...

Ad

/ 46
C# 10
3

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 46 Ad
1 of 46 Ad
Advertisement

More Related Content

Advertisement

C#10

  1. 1. / 46 C# 10 のおすすめ新機能 1 【オンライン】VISUAL STUDIO 2022 LAUNCH 記念 C# TOKYO イベント 2021年11月19日 石崎 充良
  2. 2. / 46 自己紹介 石崎 充良 ( @mishi_cs ) C# Tokyo コミュニティ管理メンバー GitHub: https://github.com/m-ishizaki blog: https://rksoftware.hatenablog.com/ 2
  3. 3. / 46 C# 10 3
  4. 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. 5. / 46 C# 10 の新機能一覧 (提案一覧) 5 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/proposals/csharp-9.0/records など
  6. 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. 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. 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 の オ ー バ ー ラ イ ド
  9. 9. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 9 record とつけると レコード構造体になる
  10. 10. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 10 readonly 構造体にして初めて イミュータブル (不変) 色々なレコード型 record とつけると レコード構造体になる 通常の構造体ではフィールド にする必要がある
  11. 11. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 11 readonly 構造体にして初めて イミュータブル (不変) レコードクラスは イミュータブル (不変) なので 混同注意
  12. 12. / 46 レコード構造体 レコード構造体でできるようになること 12 位置指定レコード いい感じの ToString() の実装 == で比較が できるようになる 通常の構造体では どれもできない
  13. 13. / 46 レコード構造体 with 式は通常の構造体でも使える 13 with 式は通常の構造体でも使 える
  14. 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 の オ ー バ ー ラ イ ド
  15. 15. / 46 パラメーターなしの構造体コンストラクター 構造体でパラメータのないコンストラクタ を作れる 15 パラメータのないコンストラクター
  16. 16. / 46 パラメーターなしの構造体コンストラクター パラメータを受け取らなくても、フィール ドは初期化される必要がある 16 フィールドの宣言で同時に 初期値をセットしているので OK
  17. 17. / 46 パラメーターなしの構造体コンストラクター パラメータを受け取らなくても、フィール ドは初期化される必要がある 17 コンストラクター内で 初期値をセットしているので OK
  18. 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. 19. / 46 グローバルな using ディレクティブ 一つのファイルで using すると全てのファ イルで using したものとなる 19 Class1 とは別のファイルに 書かれているソースコード System.Text.StringBuilder クラス が名前空間なしで使えている using の前に global とつける
  20. 20. / 46 暗黙的なグローバルな using ディレクティブ .NET 6 のプロジェクトでは何もしなくても 使えてしまう名前空間がある 20 これまでであれば using System; using System.Ling; が必要なコード .NET 6 で作ったプロジェクトでは using なしで使えてしまう 便利ではあるが破壊的変更 ※独自の Console クラスや FirstOrDefault メソッドを作っていたら…
  21. 21. / 46 暗黙的なグローバルな using ディレクティブ 暗黙的なグローバルな using は無効にでき る 21 .csproj ファイルの ImplicitUsings プロパティを消 す または、 DisableImplicitNamespaceImports プロパティを設定する
  22. 22. / 46 暗黙的なグローバルな using ディレクティブ 暗黙的なグローバルな using を制御 (追加/ 削除) する 22 追加/削除
  23. 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 の オ ー バ ー ラ イ ド
  24. 24. / 46 ファイル スコープの名前空間 ファイル全体の名前空間を指定する ({ } なしで) 24 同じ意味 ; が付くことに 注意
  25. 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 の オ ー バ ー ラ イ ド
  26. 26. / 46 拡張プロパティのパターン パターンマッチでプロパティの値のプロパ ティをシンプルに書ける 26
  27. 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 の オ ー バ ー ラ イ ド
  28. 28. / 46 補間された文字列の改善 ロギングフレームワークなどを想定した文字列 補完の効率化 28 二つ目、三つ目は SampleHandler が 引数のメソッドが呼ばれる
  29. 29. / 46 補間された文字列の改善 29 二つ目のメソッドの場合 AppendLitera a AppendFormatted System.Int32 AppendLitera b AppendFormatted System.Int32 AppendLitera c p 出力結果
  30. 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 の オ ー バ ー ラ イ ド
  31. 31. / 46 定数の補間文字列 定数 (const sring) の宣言で補間文字列が使 える 31
  32. 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 の オ ー バ ー ラ イ ド
  33. 33. / 46 ラムダの機能強化 メソッドの引数部分でラムダを直接書く際 に属性、return の型を書ける 33 注意点。ラムダに属性をつける場合は引数 リストに ( ) が必要
  34. 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 の オ ー バ ー ラ イ ド
  35. 35. / 46 呼び出し元の引数の式 引数の式を文字列として受け取ることがで きる 35
  36. 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. 37. / 46 強化された #line ディレクティブ #line ディレクティブで Razor などで正し いソースコードのマッピングを取れなかっ たものが取れるようになる 37 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/async-method-builders
  38. 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 の オ ー バ ー ラ イ ド
  39. 39. / 46 汎用属性 属性でジェネリクスが使える .csproj 39
  40. 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 の オ ー バ ー ラ イ ド
  41. 41. / 46 明確な代入分析の改善 変数に値がセットされているかの分析が機 能するパターンが増えた 41 null 条件演算子 null 合体演算子 三項演算子
  42. 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. 43. / 46 AsyncMethodBuilder のオーバーライド 非同期メソッド (async メソッド) をコンパイル したときに使われる AsyncMethodBuilder のカ スタマイズができる 43 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/async-method-builders
  44. 44. / 46 まとめ 44
  45. 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 リンク 超! 人気の機能 誰もがすぐに使いこなしだす ライブラリ作成者など 誰もが触る機能ではない
  46. 46. / 46 ありがとうございました。 46

×