C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines...
Transcript of C# 8 and .NET Core 3 – What's new?10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES Guidelines...
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
C# 8 and .NET Core 3 –What's new?
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Topics
New C# 8 Features
.NET Core 3.0
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
DESKTOP WEB CLOUD MOBILE GAMING IoT AI
.NET
.NET Overview
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
.NET Core 3.0
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Generic Host
• Dependency Injection Container• Configuration• Logging
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Creating Windows Services
• UseWindowsService API• dotnet publish• sc create {Service} --binPath=<path to exe>
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
GRPC
• Binary Protocol• Protobuf• Using HTTP/2• Extensions for the .NET Toolchain
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
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• …
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
How to use C# 8
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
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Indices and Ranges
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Indexes and Ranges
Index und Range & Types &
Extensions
New Operators• ^ Hat Operator• .. Range
Operator
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Hat Operator
int[] arr = { 1, 2, 3 };int lastItem = arr[^1];
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[..];
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Demo
• Ranges and Indices
• Access Slice of Span<T>• Access String• Range, Index Types• Custom Collections
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Implicit Support
Index• countable (Length, Count)• instance indexer with int
Range• countable• Slice method with two int
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Nullable Reference Types
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"
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));
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;
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>();
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Demo • Nullable Reference Types
• Enable nullability• Add annotations• Solving issues• Current issues
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Async Streams
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
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; }
}
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);
}
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");
}}
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
More Features…
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);
}}
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" }
};
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"
};
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Demo• Switch expressions with tuples• Pattern matching
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Questions?
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
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
THANK YOU
10TH ANNUAL CONFERENCE ABOUT MODERN IT TECHNOLOGIES
Thank you Sponsors #ThriveITconf
Silver
Evening event sponsor
Material
Media