Más contenido relacionado
C# 7・8 の復習
- 1. / 24
C# 7・8 の復習
1
C# TOKYO オンライン LT 大会
2020年07月29日
石崎 充良
- 2. / 24
自己紹介
石崎 充良 ( @mishi_cs )
Microsoft MVP for Developer Technologies
言語: C# XAML
活動:
・C# もくもく会 (connpass)
・C# Tokyo (connpass)
2
- 4. / 24
C# 7・8 の歴史
C# リリース ターゲット フレームワーク
7 2017/03 .NET Framework
7.1 2017/08 .NET Framework
7.2 2017/11 .NET Framework
7.3 2018/05 .NET Framework
8 2019/09 .NET Core 3.0
4
- 5. / 24
C# 7・8 の歴史
C# リリース ターゲット フレームワーク
7 2017/03 .NET Framework
7.1 2017/08 .NET Framework
7.2 2017/11 .NET Framework
7.3 2018/05 .NET Framework
8 2019/09 .NET Core 3.0
5
- 6. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
6
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
全47新機能
出典
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-1
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8
- 8. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
8
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
.NET Framework
で使えない機能を除外してみる
- 9. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
9
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
構造体の機能を除外してみる
- 10. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
10
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
Unsafe や値型の参照を扱う
機能を除外してみる
- 11. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
11
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
コンソールアプリやライブラリ
で使える機能を除外してみる
- 12. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
12
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
メソッドのオーバーロードの
解決の改善を除外してみる
- 13. / 24
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.0 out 変数 ○
タプル ○
破棄 ○
パターン一致 ○
ref ローカル変数と戻り値 ○ ○
ローカル関数 ○
式形式のメンバーの追加 ○
throw 式 ○
一般化された async の戻り値の型 ○
数値リテラルの構文の改善 ○
7.1 async Mainメソッド ○
default リテラル式 ○
推論されたタプル要素の名前 ○
ジェネリック型パラメーターのパターン マッチ ○
7.2 安全で効率的なコードを記述するための手法 ○ ○
末尾以外の名前付き引数 ○
数値リテラルでの先頭のアンダースコア (_) ○
private protected アクセス修飾子 ○
条件付きの ref 式 ○ ○
13
C# 新機能 文
/
式
ク
ラ
ス
構
造
体
メ
モ
リ
そ
の
他
.NET
Core
3.0
のみ
7.3 ピン留めを使用せずに fixed フィールドにアクセスできます。 ○
ref ローカル変数を再割り当てできます。 ○ ○
stackalloc 配列で初期化子を使用できます。 ○
パターンをサポートする型と共に fixed ステートメントを使用できます。 ○
追加のジェネリック制約を使用できます。 ○
タプル型を使用して == と != をテストできます。 ○
式の変数をより多くの場所で使用できます。 ○
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 ○
引数が in によって異なる場合のメソッド解決が改善されました。 ○
オーバーロードの解決のあいまいなケースが削減されました。 ○
8.0 読み取り専用メンバー ○
既定のインターフェイス メソッド ○ ○
パターン マッチングの拡張機能 ○
- switch 式 ○
- プロパティのパターン ○
- タプル パターン ○
- 位置指定パターン ○
using 宣言 ○
静的ローカル関数 ○
破棄可能な ref 構造体 ○
Null 許容参照型 ○
非同期ストリーム ○ ○
非同期の破棄可能 ○
インデックスと範囲 ○ ○
null 合体割り当て ○
構築されたアンマネージド型 ○ ○
入れ子になった式の stackalloc ○ ○
verbatim 補間文字列の拡張 ○
残り 29 機能