SlideShare a Scribd company logo
1 of 24
/ 23
C# 7.2 の新機能
1
城東.NET #15
2017年12月20日
石崎 充良
/ 23
自己紹介
石崎 充良 ( @mishi_cs )
言語: C# XAML
活動:
JXUG (もくもく会) (connpass)
城東.NET Users Group (connpass)
.NET 読書会 (connpass)
2
/ 23
前提
3
/ 23
Visual Studio 2017 Version 15.5
・C# 7.2 は Visual Studio の Version 15.5 以上で使える
* アップデート方法 *
インストーラーが立ち上がるので、[更新]
4
/ 23
C# 7.2 の特徴
最近の C# のアップデートの傾向ですが
・パフォーマンス関連が多い
・メモリーの使い方を意識したコードを書ける
・構造体の利用・値型の参照を扱える
5
/ 23
C# 7.2 の設定
プロジェクトの設定を変更する
6
/ 23
概要
7
/ 23
機能の一覧
・Span<T>
Span は配列(など)の一部の範囲を切り出して値の参照を持てる
・readonly struct
readonly struct は readonly なメンバーしか持てない
・in parameters / ref readonly returns
構造体を引数や return 値で参照を渡しつつ、読み取り専用に制限できる
・private protected
同一アセンブリ内でのみアクセスできる protected メンバーを宣言できる
・Non-trailing named arguments
位置が順番とあっていれば、末尾でなくても引数に名前を付けられる
・Allow digit separator after 0b or 0x
0x、0b の直後に _ を書けるようになった
・conditional ref operator
三項演算子で参照(ref)を返せるようになった。参照が返るので、結果に対して値を代入できる
・ref extension methods on structs
拡張メソッドの this 引数を参照にできる
8
/ 23
お試しコード
https://github.com/m-ishizaki/CS7_2
9
/ 23
機能
10
/ 23
Span<T> (1/2)
・Span は配列(など)の一部の範囲を切り出して値の参照を持てる
・Sapn を new する際に引数で「2 番目の要素から長さ 3」と指定した場合、for で回
すと「2 番目の要素から 3 つ」が出力される
・最初に作った ary という配列の要素を変更した際に、Span の値も変更されているの
で確かに参照を持っている
・Span だけでなく ReadOnlySpan という読み取り専用の型も存在する
11
/ 23
Span<T> (2/2)
12
/ 23
readonly struct (1/1)
・readonly struct は readonly なメンバーしか持てない
・保持する値が変更されない(値が変更可能になる定義が禁止される)
13
/ 23
in parameters / ref readonly returns (1/2)
・構造体を参照で渡してパフォーマンスを上げたいが、メソッド内/ return 先で書き換
えられたくない場合に使う
・構造体を参照で渡しつつ、読み取り専用に制限できる
14
/ 23
in parameters / ref readonly returns (2/2)
15
/ 23
private protected (1/1)
・同一アセンブリ内でのみアクセスできるアクセス修飾子
次の二つの名前空間は別アセンブリにあるとしてください
16
/ 23
Non-trailing named arguments (1/1)
・位置が順番とあっていれば、末尾でなくても引数に名前を付けられる
17
/ 23
Allow digit separator after 0b or 0x (1/1)
・0x、0b の直後に _ を書けるようになった
18
/ 23
conditional ref operator (1/2)
・三項演算子で参照(ref)を返せるようになった
・参照が返るので、結果に対して値を代入できる
見た目気持ち悪いけれど、とても便利そうで
19
/ 23
conditional ref operator (2/2)
20
/ 23
ref extension methods on structs (1/1)
・拡張メソッドの this 引数を参照にできる
21
/ 23
お試しコード
22
/ 23
お試しコード
https://github.com/m-ishizaki/CS7_2
23
/ 23
ご清聴ありがとうご
ざいました。
24

More Related Content

Similar to C# 7.2 の新機能

Similar to C# 7.2 の新機能 (20)

Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 
デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912
 
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
 
新しい EditorConfig (IntelliCode)
新しい EditorConfig (IntelliCode)新しい EditorConfig (IntelliCode)
新しい EditorConfig (IntelliCode)
 
C#7の新機能
C#7の新機能C#7の新機能
C#7の新機能
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
WPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめないWPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめない
 
20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on Linux20170311 Developing & Deploying .NET Core on Linux
20170311 Developing & Deploying .NET Core on Linux
 
.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみた.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみた
 
[2000/10] .NET Technical Briefing 2000 / Visual Studio .NET Part II
[2000/10] .NET Technical Briefing 2000 / Visual Studio .NET Part II[2000/10] .NET Technical Briefing 2000 / Visual Studio .NET Part II
[2000/10] .NET Technical Briefing 2000 / Visual Studio .NET Part II
 
WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0
 
New Features in C# 10/11
New Features in C# 10/11New Features in C# 10/11
New Features in C# 10/11
 
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
 
未知との交信!?Project SignalR
未知との交信!?Project SignalR未知との交信!?Project SignalR
未知との交信!?Project SignalR
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
 
.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう
 

More from m ishizaki

More from m ishizaki (20)

継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
 
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
 
「スタバ」する話
「スタバ」する話「スタバ」する話
「スタバ」する話
 
エンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
 
Build 2022 / Uno Platform
Build 2022 / Uno PlatformBuild 2022 / Uno Platform
Build 2022 / Uno Platform
 
7 つの Blazor
7 つの Blazor7 つの Blazor
7 つの Blazor
 
C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
 
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
 
2022 抱負
2022 抱負2022 抱負
2022 抱負
 
モバイルディスプレイ
モバイルディスプレイモバイルディスプレイ
モバイルディスプレイ
 
Windows フォームアプリ 2022
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022
 
dotnet tool
dotnet tooldotnet tool
dotnet tool
 
C#10
C#10C#10
C#10
 
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
 
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
 
C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
 
秋葉原 C# もくもく会
秋葉原 C# もくもく会秋葉原 C# もくもく会
秋葉原 C# もくもく会
 

Recently uploaded

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

C# 7.2 の新機能

  • 1. / 23 C# 7.2 の新機能 1 城東.NET #15 2017年12月20日 石崎 充良
  • 2. / 23 自己紹介 石崎 充良 ( @mishi_cs ) 言語: C# XAML 活動: JXUG (もくもく会) (connpass) 城東.NET Users Group (connpass) .NET 読書会 (connpass) 2
  • 4. / 23 Visual Studio 2017 Version 15.5 ・C# 7.2 は Visual Studio の Version 15.5 以上で使える * アップデート方法 * インストーラーが立ち上がるので、[更新] 4
  • 5. / 23 C# 7.2 の特徴 最近の C# のアップデートの傾向ですが ・パフォーマンス関連が多い ・メモリーの使い方を意識したコードを書ける ・構造体の利用・値型の参照を扱える 5
  • 6. / 23 C# 7.2 の設定 プロジェクトの設定を変更する 6
  • 8. / 23 機能の一覧 ・Span<T> Span は配列(など)の一部の範囲を切り出して値の参照を持てる ・readonly struct readonly struct は readonly なメンバーしか持てない ・in parameters / ref readonly returns 構造体を引数や return 値で参照を渡しつつ、読み取り専用に制限できる ・private protected 同一アセンブリ内でのみアクセスできる protected メンバーを宣言できる ・Non-trailing named arguments 位置が順番とあっていれば、末尾でなくても引数に名前を付けられる ・Allow digit separator after 0b or 0x 0x、0b の直後に _ を書けるようになった ・conditional ref operator 三項演算子で参照(ref)を返せるようになった。参照が返るので、結果に対して値を代入できる ・ref extension methods on structs 拡張メソッドの this 引数を参照にできる 8
  • 11. / 23 Span<T> (1/2) ・Span は配列(など)の一部の範囲を切り出して値の参照を持てる ・Sapn を new する際に引数で「2 番目の要素から長さ 3」と指定した場合、for で回 すと「2 番目の要素から 3 つ」が出力される ・最初に作った ary という配列の要素を変更した際に、Span の値も変更されているの で確かに参照を持っている ・Span だけでなく ReadOnlySpan という読み取り専用の型も存在する 11
  • 13. / 23 readonly struct (1/1) ・readonly struct は readonly なメンバーしか持てない ・保持する値が変更されない(値が変更可能になる定義が禁止される) 13
  • 14. / 23 in parameters / ref readonly returns (1/2) ・構造体を参照で渡してパフォーマンスを上げたいが、メソッド内/ return 先で書き換 えられたくない場合に使う ・構造体を参照で渡しつつ、読み取り専用に制限できる 14
  • 15. / 23 in parameters / ref readonly returns (2/2) 15
  • 16. / 23 private protected (1/1) ・同一アセンブリ内でのみアクセスできるアクセス修飾子 次の二つの名前空間は別アセンブリにあるとしてください 16
  • 17. / 23 Non-trailing named arguments (1/1) ・位置が順番とあっていれば、末尾でなくても引数に名前を付けられる 17
  • 18. / 23 Allow digit separator after 0b or 0x (1/1) ・0x、0b の直後に _ を書けるようになった 18
  • 19. / 23 conditional ref operator (1/2) ・三項演算子で参照(ref)を返せるようになった ・参照が返るので、結果に対して値を代入できる 見た目気持ち悪いけれど、とても便利そうで 19
  • 20. / 23 conditional ref operator (2/2) 20
  • 21. / 23 ref extension methods on structs (1/1) ・拡張メソッドの this 引数を参照にできる 21