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

DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
【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
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#bleis tift
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠Sho Okada
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 

What's hot (20)

DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
【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
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 

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# 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)啓 小笠原
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 

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# 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
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 

More from 信之 岩永

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話信之 岩永
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話信之 岩永
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
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がやっていること 第二版信之 岩永
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版信之 岩永
 
Anders Hejlsberg Q & A
Anders Hejlsberg Q & AAnders Hejlsberg Q & A
Anders Hejlsberg Q & A信之 岩永
 

More from 信之 岩永 (20)

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
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
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
 
Anders Hejlsberg Q & A
Anders Hejlsberg Q & AAnders Hejlsberg Q & A
Anders Hejlsberg Q & A
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: 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 Gamesatsushi061452
 
論文紹介: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 UnderstandingToru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: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...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: 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
 
論文紹介: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
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
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デバイス
 
論文紹介: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...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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/