Interested in a private company training? Request it here.
Generics is a concept so ingrained into .NET that we can't do without it. In this module we'll explain the simple and more advanced things of Generics.
Storing functions in variables is exactly what delegates allow us to do. This concept is used in a lot of locations, especially when using asynchronous programming. Events are based on delegates, so whenever something interesting happens in a UI (e.g., mouse click) and we want to react on it, we need delegates to handle it correctly.
LINQ allows to write queries that are very familiar to SQL queries. This makes certain operations like filtering and sorting data very easy. This concept is used in a lot of locations, whether it is to connect to SQL databases of reading data from Active Directory.
The C# language itself has evolved dramatically over the last couple of years. If you have been struggling to keep up with all the details of these language features, this module is for you.
When you create an object in .NET, the framework takes care of memory management for you. But what actually happens with objects when .NET decides to remove them from memory? That's what Garbage Collection is all about and we'll have a look at why it is important to understand it correctly.
Writing super-efficient code requires some special language features, and C# now has them. How to pass value types efficiently? How to avoid placing transient objects on the heap, and passing them on the stack instead? And how do you measure the performance gain (or loss)?
How does your machine run multiple processes? How does one process do multiple things at the same time? In this module, we'll discuss the advantages and problems you will encounter when using concurrency.
Everyone starts by learning the fundamentals. The Thread class is the most basic implementation for creating concurrency. It is important to have an understanding of this class so you can understand and appreciate the libraries that came afterwards.
Using variables in a multi-threaded environment can be dangerous and confusing. In this module we'll explain what can go wrong and how to avoid it.
Using threads directly is quite complicated, instead we can make use of tasks to do our bidding. There are again advantages and disadvantages to using this library and we'll explore them in this module.
The async and await keywords are amongst the most commonly used language constructs in .NET. But surprisingly few people know how it actually works.
Once you understand the async and await keywords, you can start worrying about all the other fluff like exception handling, cancellation and reporting progress of an async task. This is the subject of this module.
In a multi-core environment, being able to split data so every core is working on something is incredibly useful. This module explores a library created to do just that.
Reactive Extensions (Rx), a feature a bit complex to understand, but very powerful and hard to get back from. It is sometimes called LINQ to events, because we think of asynchronous operations or events as a stream of data. An observable collection that will, from time to time, have a new interesting event pop up that we can react to.
In this module we'll talk about using attributes to add metadata to almost everything in .NET. Metadata is of course only useful if we can actually interpret it and that's where reflection comes into play. Reflection is a powerful feature used in a lot of libraries and applications.
Making use of Expressions to dynamically create code that can be run when we want to, is very powerful. It is a feature used by LINQ for example to translate queries for a database or other system.
Source Generators allow to the generate mundane code using the C# compiler. This allows you to avoid slow reflection and opens the way for Ahead-Of-Time (OAT) compilation.
Today's applications have to be more responsive, scalable and high performing. Therefore, modern .NET developers have to be familiar with the more advanced features of .NET and know how things work under the hood. This course examines advanced concepts of the framework like async programming, parallel computing and Reactive Extensions. You'll explore the latest C# language features like Nullable Reference Types and Asynchronous Streams. Join the training and improve your existing .NET programming skills. All examples and labs use the latest LTS version of .NET and Visual Studio. Labs also work with any recent .NET and VS version.
This in-depth course is meant for experienced developers who have a solid understanding of the .NET platform.