SlideShare a Scribd company logo
1 of 64
C# 9.0
.NET 5.0
++C++;
岩永 信之
今日話すこと
• .NET 5.0/C# 9.0世代の大まかな流れ
• C# 9.0の主要な機能紹介
全部は紹介できないので、全部知りたい人は
公式のLanguage Feature Status参照
.NET 5.0/C# 9.0世代の
大まかな流れ
.NET 5.0 (名称)
• 単に「.NET」になりました
• 略称もnet5.0
• .NET Standard 2.1と.NET Core 3.1両方の後続
• netstandard2.1, netcoreapp3.1ライブラリ参照可能
• .NET Frameworkは4.8が最終
• net5.0からは.NET Frameworkを指さなくなる
• Mono (Xamarin)は.NET Coreとライブラリを共通化
• TargetFrameworkを分ける必要がなくなった
.NET 5.0 (platform)
• 共通ライブラリを指して「net5.0」
• net5.0: プラットフォーム非依存な部分
• net5.0-windows : WPFとかWinFormsとか
• net5.0-android : 旧monodroid (予定)
• net5.0-ios : 旧Xamarin.iOS (予定)
• net5.0-ios14.0なライブラリを
net6.0-ios15.0なライブラリから参照可能
.NET 5.0 (年次リリース)
• 1年に1回、決まった時期(11月)にリリース
• 偶数バージョンだけ長期サポート(LTS)付き
• 奇数バージョンはGA (Generally Available)
• 「普通に使っても大丈夫だよ」くらいのニュアンス
• 偶数バージョンが出たらそっちに移ってほしい
今年(.NET 5.0)はGAの年
.NET 5.0 (多platform対応プラン)
• 共通ライブラリを指して「net5.0」
• net5.0: プラットフォーム非依存な部分
• net5.0-windows : WPFとかWinFormsとか
• net5.0-android : 旧monodroid (予定)
• net5.0-ios : 旧Xamarin.iOS (予定)
• net5.0-ios14.0なライブラリを
net6.0-ios15.0なライブラリから参照可能
これも段階的に改善予定
1. インストーラーでインストール済みのSDKのみ
• .NET 5時点で、Windowsのみ
• 旧Xamarinのものは .NET 6 予定
2. NuGetみたいな自動解決手段の提供
C# 9.0 (.NET 5世代の C#)
• C#も.NETと同じく年次リリース
• 1つの機能を数バージョンかけて改善していく
• 数バージョンかかる大きな機能
• Nullability解析
• null許容参照型
• Working with data
• パターン マッチング
• レコード型 C# 9.0で一番大きいのはこれ
C# 9.0 (.NET 5世代の C#)
• Xamarin統合※とかで用途が増えてる
• Interactive実行
• リフレクションが使いづらい環境での実行
• ネイティブ相互運用の機会が増えてる
※ 完全統合は.NET 6.0予定
Nullability解析
nullはコンパイル時にフロー解析して排除する
Nullability解析
• C# 8.0 (前バージョン)~
「nullはbillion dollar mistake」
• 参照型Tがnullを受け付けてしまうのはまずかった
• 今更nullをなくせない言語でも静的解析すべき
• T はnullを受け付けない
• T? にした時だけnullを受け付ける
• この手の解析は結構難しいので徐々に改善
Nullability解析
C# 8.0
(2019)
C# 9.0
(今ここ)
C# 10.0
(2021)
(候補)
・最初のリリース
・ MemberNotNull属性
・制約なしジェネリック T?
・ Task<T?>, IEnumerable<T?>の共変性
C# 9.0のnull解析: MemberNotNull
• MemberNotNull属性
class A
{
public string Name { get; }
}
非null型を初期化
していないので警告
C# 9.0のnull解析: MemberNotNull
• MemberNotNull属性
class A
{
public string Name { get; }
public A() => Name = "name";
}
コンストラクターで
初期化すれば警告消える
C# 9.0のnull解析: MemberNotNull
• MemberNotNull属性
class A
{
public string Name { get; private set; }
public A() => Init();
private void Init() => Name = "name";
}
初期化をコンストラクターから
メソッド抽出するとnull解析できなくなる
(Nameを初期化してないと警告が出る)
C# 9.0のnull解析: MemberNotNull
• MemberNotNull属性
class A
{
public string Name { get; private set; }
public A() => Init();
[MemberNotNull(nameof(Name))]
private void Init() => Name = "name";
}
Nameの非null初期化を保証
(Aに出ていた警告が消える)
C# 9.0のnull解析: 制約なしT?
• 制約なしT? (C# 8.0)
#nullable enable
class A<T>
{
public T? M() => default;
}
C# 8.0まで
制約なしのTに?は付けれない
C# 9.0のnull解析: 制約なしT?
• class制約T?
#nullable enable
class A<T> where T : class
{
public T? M() => default;
}
C# 8.0まででも
class(参照型)制約を付けるとOK
T?はnull許容参照型
(コンパイル時の静的解析)
C# 9.0のnull解析: 制約なしT?
• struct制約T?
#nullable enable
class A<T> where T : struct
{
public T? M() => default;
}
C# 8.0まででも
struct(値型)制約を付けるとOK
T?はnull許容値型
(Nullable<T>構造体の構文糖衣)
C# 9.0のnull解析: 制約なしT?
• 制約なしT? (C# 9.0)
#nullable enable
class A<T>
{
public T? M() => default;
}
C# 9.0でこれがOKに
ただ…
C# 9.0のnull解析: 制約なしT?
• 制約なしT? は「defaultable」
public T? M() => default;
戻り値はdefault
• 参照型 : null
• null許容値型 : null
• 非null値型 : 0
string? a = new A<string?>().M();
string? b = new A<string>().M();
int? c = new A<int?>().M();
int d = new A<int>().M();
参照型の時は
string → string?
非null値型の時は
int → int (0が返る)
これはnullが返る
要はLINQのFirstOrDefaultと同じ挙動
Working with data
データ中心のプログラミング
Working with data
• データが主役のプログラミング
class Point
{
public int X { get; }
public int Y { get; }
}
• 保存とか通信とかするとき
こういうpublicプロパティだ
け持つ型を多用
• immutableにしたい
• value semanticsを持ちたい
value semantics
• (参照型であっても)値で比較
• コピーを作って部分書き換え
var x = new Point(1, 2);
var y = new Point(1, 2);
Console.WriteLine(x == y); true
var x = new Point(1, 2);
var y = x with { X = 3 };
x は {X=1, Y=2} のまま変えない
新たに {X=3, Y=2} で y を作る
Working with dataのボイラープレート
• 真面目に書こうとすると煩雑
class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
immutableにしたいとき、こ
の手のボイラープレート
コードが多い問題
この他にもEqualsとか
GetHashCodeとか
Deconstructとか
同じ名前を何か所も…
Working with dataのための言語機能
• 言語機能のサポートが欲しい
• パターン マッチングとかレコード型とかはこの一環
class Point
{
public int X { get; }
public int Y { get; }
}
record Point(int X, int Y);
• ボイラープレートコード削減
• 推奨する方式(immutable)を一
番短く書けるように
パターン マッチング
C# 8.0
(2019)
C# 9.0
(今ここ)
C# 10.0
(2021)
(候補)
・ 型パターン
・ 破棄(discard)
C# 7.0
(2017)
・ 再起パターン (位置、プロパティ)
・ パターンの組み合わせ (and, or, not, ())
・ 比較パターン (<, >, <=, >=)
・ listパターン ([])
C# 9.0で追加されるパターン
• 組み合わせ&大小比較
int m(byte b)
{
if (b < 10) return 1;
else if (b >= 10 && b < 100) return 2;
else if (b >= 100) return 3;
else return -1;
}
これまでのコード
C# 9.0で追加されるパターン
• 組み合わせ&大小比較
Visual Studioの自動リファクタリング
C# 9.0で追加されるパターン
• 組み合わせ&大小比較(網羅チェックがかかる)
変化後
int m(byte b) => b switch
{
< 10 => 1,
>= 10 and < 100 => 2,
>= 100 => 3,
_ => -1
};
読みやすい・書きやすいか
というと微妙なものの…
ここをエラーにしてくれる
この3条件でbyteが取り
うる値を全部網羅してる
なので到達不能
パターン補足: not
• not null
x is not null
x is { }
x != null
一応、新パターン
一番「意味通り」なコードに
C# 8.0のプロパティ パターンで代用
プロパティ値取得前にnullチェックが挟まる
ユーザー定義 == があるときに意味が変わる
(ユーザー定義のやつが呼ばれる)
(not nullは常に参照比較)
パターン補足: not
• notと変数宣言
void m(object x)
{
if (x is not string s) return;
// else の側で s を使える
Console.WriteLine(s.Length);
}
notの後ろで変数宣言可能
(switchでは不可。if限定)
パターン補足: and
• and両辺の変数宣言はどちらもdefinite assigned
interface IA { int X { get; } }
interface IB { int Y { get; } }
int m(object x) => x switch
{
IA a and IB b => a.X * b.Y,
};
aもbも確実に初期化されてる保証あり
プロパティ アクセス可能
パターン補足: or
• orは一応、共通型判定を受ける
object m(object x) => x switch
{
(IEnumerable or ICollection) and var e => e.GetEnumerator(),
};
IEnumerableとICollectionの
共通型を一応調べてくれる
この場合、eはIEnumerable
(ただ、C#の「共通型」判定自体が
そんなに賢くないのでそんなに役立たない)
レコード型
C# 9.0
(今ここ)
C# 10.0
(2021)
(候補)
・最初のリリース
・ Discriminated Union
・ 値型レコード (record struct (仮))
record Point(int X, int Y);
record
• value semanticsを持つ参照型
record Point
{
public int X { get; }
public int Y { get; }
}
コンパイラー生成
bool Equals(Point other) => (X, Y) == (other.X, other.Y);
int GetHashCode() => HashCode.Combine(X, Y);
void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
Clone, ToString, IEquatable<T>, ...
(デフォルトで)
publicなプロパティ
全部が関与
initプロパティ
• new、Clone直後だけ書き換え可能なプロパティ
record Point
{
public int X { get; init; }
public int Y { get; init; }
}
setの代わりに
initキーワード
initプロパティ
• new直後?
• 要するにオブジェクト初期化子
var p = new Point
{
X = 1,
Y = 2,
}
p.X = 1;
この行はOK
この行はエラー
initプロパティ
• new直後?
• 要するにオブジェクト初期化子
var p = new Point
{
X = 1,
Y = 2,
};
p.X = 1;
var p = new Point
p.X = 1;
p.Y = 2;
コンパイラー
による展開
展開結果は同じだけど
コンパイル時検査で
「初期化のみ」を保証
initプロパティ
• Clone直後?
• with式: Clone + 部分書き換え
var p1 = new Point
{
X = 1,
Y = 2,
}
var p2 = p1 with { X = 3 };
p1は(1, 2)のまま
p2は(3, 2)に
initプロパティ
• Clone直後?
• with式: Clone + 部分書き換え
var p2 = p1.Clone();
p2.X = 3;
var p2 = p1 with { X = 3 };
Clone直後だけ書き換え可能
(これもコンパイル時検査)
※
※ 実際には<Clone>$みたいな名前で生成されてて
with式以外からは呼べないようにしてある
プライマリ コンストラクター
• 型名直後に引数リスト
• public initプロパティとコンストラクターを生成
record Point(int X, int Y);
record Point
{
public int X { get; init; }
public int Y { get; init; }
public Point(int x, int y) => (X, Y) = (x, y);
}
プライマリ コンストラクター
• 現状、record専用の構文
record Point(int X, int Y);
C# 9.0
class Point(int X, int Y) { }
C# 10.0
struct Point(int X, int Y) { }
• プロパティ生成まではしない
• メンバー初期化子で参照できる
recordの継承
• 継承可能
record Base;
record Derived : Base;
recordの継承
• 継承可能
• プライマリ コンストラクターもOK
record Base(int X);
record Derived(int X, int Y) : Base(X);
record Base(int X);
record Derived() : Base(1);
recordの継承
• 継承可能
• Union的な使い方
record Shape;
record Circle(float R) : Shape;
record Rect(float W, float H) : Shape;
名前付きの型と匿名の型
• 名前の有無での差を減らしたい
匿名
(anonymous)
ソース型推論 ターゲット型推論
(target-typed new)
位置指定
(positional)
var x = (1, 2); var x = new T(1, 2); T x = new(1, 2);
名前指定
(nominal)
var x = new
{
X = 1,
Y = 2,
};
var x = new T
{
X = 1,
Y = 2,
};
T x = new()
{
X = 1,
Y = 2,
};
匿名型(C# 3.0)
タプル(C# 7.0) ターゲットからの型推論(C# 9.0)
オブジェクト初期化子(C# 3.0)
initプロパティ(C# 9.0)
target-typed new
• varと逆向きに型推論
• varが使えない場所と言えば…
class T
{
Dictionary<string, List<(int x, int y)[]> d = new();
}
多分これが一番よく使うと思います
discriminated union (C# 10.0予定)
• recordをdiscriminated union的にしたい
record Shape
{
Circle(float R);
Rect(float W, float H);
}
float Area(Shape s) => s switch
{
Circle c => c.R * c.R * MathF.PI,
Rect r => r.W * r.H,
};
※ 多分、別キーワードか
追加修飾子が必要
(これ自体はC# 9.0でも書ける)
「CircleとRectしかない」(網羅性)
の判定が9.0だとできない
用途の増加
用途の増加: Interactive
• Interactive実行
• C#入門記事に埋め込んだコードをその場で実行
• Jupyter Notebookみたいな使い方したい
1行1行入力して、
すぐに計算結果を見たい
用途の増加: Interactive
• Interactive実行
• C#入門記事に埋め込んだコードをその場で実行
今、C#公式チュートリアルがそうなって
る
用途の増加: Interactive
• Interactive実行
• Jupyter Notebookみたいな使い方したい
.NET Interactive Notebooks
(Visual Studio Codeで書いて
ipynb形式で保存可能)
通常C#とinteractive C#
• Interactive専用構文がいくつかあり(C# 6.0以降)
• C# 9.0で通常C#とInteractive C#の差を減らしたい
• top-levelプログラム
using System;
Console.WriteLine("Hello World!");
Program.cs
これだけでコンパイル可能
Program.Main不要
用途の増加: 事前コンパイル
• JITコンパイルできない・したくない環境向け
• iOSとかWebAssemblyとか
• リフレクションが使いづらい
• コード生成の類を静的(コンパイル時)に行いたい
Source Generator
• C# 9.0でコンパイル時コード生成をサポート
• C# 6.0からあるAnalyzerの延長
using System;
partial class A
{
[StringLiteral.Utf8("😀")]
public static partial ReadOnlySpan<byte> M();
}
public static partial System.ReadOnlySpan<byte> M() =>
new byte[] {240, 159, 152, 128, };
コンパイル時にソースコード生成
Source Generator
• C# 9.0でコンパイル時コード生成をサポート
• C# 6.0からあるAnalyzerの延長
これを自作したり、
NuGet参照したりできる
この例のやつは
https://www.nuget.org/packages/StringLiteralGenerator/
https://github.com/ufcpp/StringLiteralGenerator
Source Generator
• Visual Studioのサポートあり
• F12で生成結果のソースコードに飛べて
• F9でブレイクポイントをしかけれて
• F11でステップイン実行できる
Source Generator
• C# 9.0のpartialメソッド
using System;
partial class A
{
[StringLiteral.Utf8("😀")]
public static partial ReadOnlySpan<byte> M();
}
これまで(C# 2.0)のpartial
• publicとかは付けない
• コード生成が先にある想定
• 手書きで実装を追加(してもいい)
C# 9.0の新partial
• publicとかを付ける
• 手書きが先にある想定
• コード生成で作る(必須)
Source Generator化されそうなもの(1)
• C#以外からのコード生成
• Razor (cshtmlからのC#コード生成)
• Grpc.Tools (protoからのC#コード生成)
Source Generator化されそうなもの(2)
• 脱リフレクション
• Jsonとかのシリアライザー
• Regexの事前コンパイル
• DI (コンストラクター インジェクションとか)
Source Generator化されそうなもの(3)
• C#内でのコード生成
• PropertyChanged
• recordのカスタマイズ
• EqualsとかToStringとかの挙動を自分でコントロール
• ガチガチの最適化
• さっき出した例(UTF-8バイト列生成)とか
用途の増加: ネイティブ相互運用
• Xamarin統合で対応プラットフォームが増加
• ネイティブ相互運用が大変になったらしい
• C#にもいくつか相互運用用の文法追加
• nint, nuint: CPUネイティブなint
• 関数ポインター (delegate* <int, void> みたいなの)
• 間接的なメリット(ほとんどの人は直接使わない)
• dotnet/runtime内で使われまくる予定
• 全.NETユーザーが間接的に恩恵受ける
まとめ
• .NET 5.0
• 年次リリース化&用途増加
• C# 9.0
• 大きな機能は少しずつ改善
• レコード型、パターン マッチング、Nullability解析
• 用途増加に対応
• top-levelプログラム、source generator

More Related Content

What's hot

C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかYoshifumi Kawai
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~啓 杉本
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用Takaaki Suzuki
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
脱 Excel設計書
脱 Excel設計書脱 Excel設計書
脱 Excel設計書rai
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 

What's hot (20)

C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
脱 Excel設計書
脱 Excel設計書脱 Excel設計書
脱 Excel設計書
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 

Similar to C# 9.0 / .NET 5.0

.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10Kenta Hattori
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014信之 岩永
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 

Similar to C# 9.0 / .NET 5.0 (20)

.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
What is template
What is templateWhat is template
What is template
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 

More from 信之 岩永

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話信之 岩永
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話信之 岩永
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方信之 岩永
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に信之 岩永
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3信之 岩永
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版信之 岩永
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版信之 岩永
 

More from 信之 岩永 (20)

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
 
Modern .NET
Modern .NETModern .NET
Modern .NET
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 
Coding Interview
Coding InterviewCoding Interview
Coding Interview
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

C# 9.0 / .NET 5.0

Editor's Notes

  1. https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md
  2. newの有無とか、()の有無とかで細かい不整合は残ってたりするんだけど…
  3. https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/
  4. https://devblogs.microsoft.com/dotnet/net-interactive-preview-3-vs-code-insiders-and-polyglot-notebooks/