C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines...

43
C# 8 and .NET Core 3 What's new?

Transcript of C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines...

Page 1: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

C# 8 and .NET Core 3 –What's new?

Page 2: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Topics

New C# 8 Features

.NET Core 3.0

Page 3: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Christian Nagel• Training• Coaching• Consulting• Development

• Microsoft MVP• www.cninnovation.com• csharp.christiannagel.com• github.com/christiannagel• github.com/cninnovation

Page 4: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

DESKTOP WEB CLOUD MOBILE GAMING IoT AI

.NET

.NET Overview

Page 5: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

.NET Core 3.0

Page 6: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Generic Host

• Dependency Injection Container• Configuration• Logging

Page 7: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Creating Windows Services

• UseWindowsService API• dotnet publish• sc create {Service} --binPath=<path to exe>

Page 8: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

GRPC

• Binary Protocol• Protobuf• Using HTTP/2• Extensions for the .NET Toolchain

Page 9: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

WPF

• .NET API Portability Analyzer• try-convert (unsupported tool)

• https://github.com/dotnet/try-convert• WPF Apps with .NET Core 3.0

Page 10: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

.NET Core 3.0 – And more…

• ASP.NET Core Endpoint Routing• SignalR streaming from the client• EF Core Cosmos DB Provider• .NET Local Tools• Windows Native Interop• Create COM components• …

Page 11: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

How to use C# 8

Page 12: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

How to use C# 8

• By default enabled with .NET Core 3.0

• Enable with other projects• <LangVersion>8.0</LangVersion>• <Nullable>enable</Nullable>

• Directory.Build.Props

Page 13: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Features based on Frameworks/Runtimes

• Syntax sugar features with all frameworks• Some features based on classes & interfaces

• Ranges, async streams• Runtime updates required

• .NET Standard 2.1• Default Interface Members

Page 14: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Indices and Ranges

Page 15: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Indexes and Ranges

Index und Range & Types &

Extensions

New Operators• ^ Hat Operator• .. Range

Operator

Page 16: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Hat Operator

int[] arr = { 1, 2, 3 };int lastItem = arr[^1];

Page 17: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Range

string text1 = "the quick brown fox jumped over the lazy dogs";string quick = text1[4..9];string dog = text1[^4..^1];string brownfoxjumpedandmore = text1[10..];string thequick = text1[..8];string text2 = text1[..];

Page 18: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Demo

• Ranges and Indices

• Access Slice of Span<T>• Access String• Range, Index Types• Custom Collections

Page 19: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Implicit Support

Index• countable (Length, Count)• instance indexer with int

Range• countable• Slice method with two int

Page 20: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Nullable Reference Types

Page 21: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Null References

Most common .NET Exception

NullReferenceException

Billion Dollar Mistake

1965 in Algol by Tony Hoare

"Billion Dollar Mistake"

Page 22: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Null Conditional Operator (C# 6)

• Null checks made easier

int? length = customers?.Length;Customer first = customers?[0];int? count = customers?[0]?.Orders?.Count();

public void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

Page 23: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Coalescing Operator (C# 5)

• Default values for null

int length = customers?.Length ?? 0;

public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true;

Page 24: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Reference Types are not

Nullable

• #nullable enable/disable/restore• annotated with ? – nullable reference type

• string?• Null-forgiving operator

• !• Null-coalescing assignment

• numbers ??= new List<string>();

Page 25: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Nullable Reference Types

• Documentation: null or not null• Helps finding bugs, no guarantees!• Flow analysis - tracks nullable reference variables• Breaks existing code (opt-in)• Nullability implemented with metadata (ignored

by down-level compilers)• string, T non-nullable• string?, T? nullable

Page 26: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Demo • Nullable Reference Types

• Enable nullability• Add annotations• Solving issues• Current issues

Page 27: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Guidelines

• Library authors – Nullable adoption phasebefore .NET 5

• App developers – nullability on your own pace

• Annotate new APIs• Do not remove argument validation• Parameter is non-nullable if parameters are

checked (ArgumentNullException)• Parameter is nullable if documented to

accept null• Prefer nullable over non-nullable with

disagreements

Page 28: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Async Streams

Page 29: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Async Streams

before C# 8: async/await returns one result

Async streams extends async/await with a stream of results

Asynchronous data source controlled by the consumer

Alternative to System.Reactive

Page 30: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Async Streams

• IAsyncDisposable• IAsyncEnumerable• IAsyncEnumerator

public interface IAsyncDisposable{ValueTask DisposeAsync();

}

public interface IAsyncEnumerable<out T>{IAsyncEnumerator<T> GetAsyncEnumerator();

}

public interface IAsyncEnumerator<out T> : IAsyncDisposable

{ValueTask<bool> MoveNextAsync();T Current { get; }

}

Page 31: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Using Async Streams

• await foreach

IAsyncEnumerator<T> enumerator = enumerable.GetAsyncEnumerator();

try{

while (await enumerator.MoveNextAsync()){

Use(enumerator.Current);}

}finally{

await enumerator.DisposeAsync();}

await foreach (var i in enumerable){Use(i);

}

Page 32: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Async with yield

• return IAsyncEnumerable

static async IAsyncEnumerable<int> MyIterator(){

try{

for (int i = 0; i < 100; i++){

await Task.Delay(1000);yield return i;

}}finally{

await Task.Delay(200);Console.WriteLine("finally");

}}

Page 33: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Demo

• Async Streams & SignalR

• Streaming from the Server to the Client• Streaming from the Client to the Server• C# 8 Async Streams

Page 34: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

More Features…

Page 35: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

using declaration

public void Method(IEnumerable<string> lines){using var file = new StreamWriter("sample.txt");foreach (var line in lines){file.WriteLine(line);

}}

Page 36: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

switch Expression

static string M2(Shape shape) =>shape switch {

Shape s when s.Size.height > 100 =>$"large shape with size {s.Size} at position {s.Position}",

Ellipse e =>$"Ellipse with size {e.Size} at position {e.Position}",

Rectangle r =>$"Rectangle with size {r.Size} at position {r.Position}",

_ => "another shape" }

};

Page 37: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Recursive, Property, and Discard Patterns

static string M3(Shape shape) =>shape switch{CombinedShape (var shape1, var (pos, _)) => $"combined shape - shape1: {shape1.Name}, pos of shape2: {pos}",

{ Size: (200, 200), Position: var pos } => $"shape with size 200x200 at position {pos.x}:{pos.y}",

Ellipse (var pos, var size) => $"Ellipse with size {size} at position {pos}",

Rectangle (_, var size) => $"Rectangle with size {size}",_ => "another shape"

};

Page 38: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Demo• Switch expressions with tuples• Pattern matching

Page 39: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

.NET Futures

.NET Core 3.1

Long-Term SupportDec-2019

.NET 5.0

CurrentNov-2020

.NET 6.0

LTSNov-2021

Page 40: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Questions?

Page 41: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

For action

• Use .NET Core• Annotate libraries with nullability• Use new C# 8 features• Create Windows Services, use gRPC

• https://csharp.christiannagel.com• https://github.com/christiannagel/thriveconf2019• https://github.com/ProfessionalCSharp

Page 42: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

THANK YOU

Page 43: C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines • Library authors – Nullable adoption phase before .NET 5 • App developers

10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES

Thank you Sponsors #ThriveITconf

Silver

Evening event sponsor

Material

Media