C#10

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

Recomendados

C# 7・8 の復習 von
C# 7・8 の復習C# 7・8 の復習
C# 7・8 の復習m ishizaki
729 views25 Folien
ソースコードリーディングの基礎 von
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎hogemuta
1.3K views40 Folien
Designing data intensive applications-ch4 von
Designing data intensive applications-ch4Designing data intensive applications-ch4
Designing data intensive applications-ch4Motohiro Kanda
58 views22 Folien
2020 acl learning_to_recover_from_multi-modality_errors_for_non-autoregressiv... von
2020 acl learning_to_recover_from_multi-modality_errors_for_non-autoregressiv...2020 acl learning_to_recover_from_multi-modality_errors_for_non-autoregressiv...
2020 acl learning_to_recover_from_multi-modality_errors_for_non-autoregressiv...広樹 本間
155 views36 Folien
C# 8 von
C# 8C# 8
C# 8m ishizaki
531 views37 Folien
A Tour of PostgreSQL von
A Tour of PostgreSQLA Tour of PostgreSQL
A Tour of PostgreSQLEDB
320 views86 Folien

Más contenido relacionado

Similar a C#10

NLP2012 von
NLP2012NLP2012
NLP2012Yuki Nakayama
418 views25 Folien
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp von
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp Yahoo!デベロッパーネットワーク
41.8K views97 Folien
Hello Dark-Side C# (Part. 1) von
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
1.2K views29 Folien
Dalvikバイトコードリファレンスの読み方 改訂版 von
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
3.7K views28 Folien
Software Development with Symfony von
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
1.1K views36 Folien
C# 3.0 以降 von
C# 3.0 以降C# 3.0 以降
C# 3.0 以降Fujio Kojima
6.7K views76 Folien

Similar a C#10(20)

Hello Dark-Side C# (Part. 1) von Yuto Takei
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Yuto Takei1.2K views
Dalvikバイトコードリファレンスの読み方 改訂版 von Takuya Matsunaga
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga3.7K views
Software Development with Symfony von Atsuhiro Kubo
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
Atsuhiro Kubo1.1K views
Inner world of Perl::Lint von moznion
Inner world of Perl::LintInner world of Perl::Lint
Inner world of Perl::Lint
moznion2.1K views
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標 von Tomoharu ASAMI
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI3.2K views
Optimisation 2013-07-02 von kmiyako
Optimisation 2013-07-02Optimisation 2013-07-02
Optimisation 2013-07-02
kmiyako449 views
DW テンプレートをマスターして 楽々サイトメンテナンス von Akira Maruyama
DW テンプレートをマスターして 楽々サイトメンテナンスDW テンプレートをマスターして 楽々サイトメンテナンス
DW テンプレートをマスターして 楽々サイトメンテナンス
Akira Maruyama2.3K views
とあるDBAの黒い画面(ターミナル) von Kazuhiro Yoshikawa
とあるDBAの黒い画面(ターミナル)とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
Kazuhiro Yoshikawa2.8K views
Linux Kernel Seminar in tripodworks von tripodworks
Linux Kernel Seminar in tripodworksLinux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworks
tripodworks675 views
Scalaプログラミング・マニアックス von Tomoharu ASAMI
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI6.5K views
Hokkaido.cap#1 Wiresharkの使い方(基礎編) von Panda Yamaki
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Panda Yamaki56.6K views
.NET Compiler Platform von 信之 岩永
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
信之 岩永36.1K views
PHPフレームワーク入門 von Sho A
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
Sho A2K views
C# design note sep 2014 von 信之 岩永
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
信之 岩永12.8K views

Más de m ishizaki

継承辺りのもしかしたらマイナーかもしれない C# von
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
1.1K views32 Folien
継承辺りのもしかしたらマイナーかもしれない C# von
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
24 views32 Folien
Visual Studio を使わず .NET する von
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET するm ishizaki
274 views76 Folien
Xamarin で良くやっていたあれを MAUI でする話 von
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話m ishizaki
905 views61 Folien
「スタバ」する話 von
「スタバ」する話「スタバ」する話
「スタバ」する話m ishizaki
232 views59 Folien
エンジニアと「スタバ」ツイートについて von
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてm ishizaki
199 views10 Folien

Más de m ishizaki(20)

継承辺りのもしかしたらマイナーかもしれない C# von m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki1.1K views
継承辺りのもしかしたらマイナーかもしれない C# von m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki24 views
Visual Studio を使わず .NET する von m ishizaki
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
m ishizaki274 views
Xamarin で良くやっていたあれを MAUI でする話 von m ishizaki
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
m ishizaki905 views
「スタバ」する話 von m ishizaki
「スタバ」する話「スタバ」する話
「スタバ」する話
m ishizaki232 views
エンジニアと「スタバ」ツイートについて von m ishizaki
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
m ishizaki199 views
Build 2022 / Uno Platform von m ishizaki
Build 2022 / Uno PlatformBuild 2022 / Uno Platform
Build 2022 / Uno Platform
m ishizaki130 views
7 つの Blazor von m ishizaki
7 つの Blazor7 つの Blazor
7 つの Blazor
m ishizaki408 views
C# Tokyo コミュニティ説明 202205 版 von m ishizaki
C# Tokyo コミュニティ説明 202205 版C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
m ishizaki1.2K views
仮想環境に MAUI 環境を構築する話 von m ishizaki
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
m ishizaki428 views
モバイルディスプレイ von m ishizaki
モバイルディスプレイモバイルディスプレイ
モバイルディスプレイ
m ishizaki575 views
Windows フォームアプリ 2022 von m ishizaki
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022
m ishizaki707 views
C# Tokyo コミュニティについて Short 版 von m ishizaki
C# Tokyo コミュニティについて Short 版C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
m ishizaki627 views
C# Tokyo コミュニティ案内 von m ishizaki
C# Tokyo コミュニティ案内C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
m ishizaki781 views
C# 9 のおすすめ新機能 von m ishizaki
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki1.1K views
C# Tokyo コミュニティ説明 2021/01/29 版 von m ishizaki
C# Tokyo コミュニティ説明 2021/01/29 版C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
m ishizaki555 views
秋葉原 C# もくもく会 von m ishizaki
秋葉原 C# もくもく会秋葉原 C# もくもく会
秋葉原 C# もくもく会
m ishizaki183 views
C# Tokyo guide 2020/12/25 von m ishizaki
C# Tokyo guide 2020/12/25C# Tokyo guide 2020/12/25
C# Tokyo guide 2020/12/25
m ishizaki348 views

C#10

  • 1. / 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 の オ ー バ ー ラ イ ド
  • 9. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 9 record とつけると レコード構造体になる
  • 10. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 10 readonly 構造体にして初めて イミュータブル (不変) 色々なレコード型 record とつけると レコード構造体になる 通常の構造体ではフィールド にする必要がある
  • 11. / 46 レコード構造体 構造体をレコード型にできる (ただし標準 はミュータブル (変更可) ) 11 readonly 構造体にして初めて イミュータブル (不変) レコードクラスは イミュータブル (不変) なので 混同注意
  • 12. / 46 レコード構造体 レコード構造体でできるようになること 12 位置指定レコード いい感じの ToString() の実装 == で比較が できるようになる 通常の構造体では どれもできない
  • 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 プロパティを設定する
  • 22. / 46 暗黙的なグローバルな using ディレクティブ 暗黙的なグローバルな using を制御 (追加/ 削除) する 22 追加/削除
  • 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 の オ ー バ ー ラ イ ド
  • 29. / 46 補間された文字列の改善 29 二つ目のメソッドの場合 AppendLitera a AppendFormatted System.Int32 AppendLitera b AppendFormatted System.Int32 AppendLitera c p 出力結果
  • 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. / 46 定数の補間文字列 定数 (const sring) の宣言で補間文字列が使 える 31
  • 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 リンク 超! 人気の機能 誰もがすぐに使いこなしだす ライブラリ作成者など 誰もが触る機能ではない