In the second part of this course, we take .NET developers behind the scenes of advanced C# language features to get a deeper insight into the language, the Intermediate Language (IL) it compiles into, and the Common Language Runtime (CLR) it runs on. By studying language internals, you can make better design choices involving advanced language features, solve hard debugging puzzles quicker, and understand the performance ramifications of these language features. This is the second part of a two-part course.
Bart is a software engineer building massive scale data processing systems at Microsoft. His areas of expertise include programming languages, runtimes, reactive
programming, and databases. Prior to joining Microsoft, Bart was an MVP for C#. Bart is a popular speaker at various conferences and the author of a few C# books.
Hidden Gems in System.Runtime.CompilerServices Hi everyone and welcome back to the C# language internals course here at Pluralsight. I'm Bart DeSmet and this module will talk about the System. Runtime. CompilerServices namespace. So what's in a name? Well obviously it's all about a collection of types that are used by compilers. Whether it's the C# compiler, the VB compiler, F#, C++, they all rely on some of the types that live in this namespace. Now we've already seen plenty of examples of types that live in this namespace. For example, when we talked about dynamic typing in this course, we saw the call site and call site of T types as well as the dynamic attribute that used to disambiguate between object and dynamic. Secondly, we talked about extension methods on various occasions when talking about language features like link. The attribute that distinguishes an ordinary static method from one that has to be interpreted as an extension method also lives in this namespace. All of the stuff around C# 5. 0 dynamic, whether it's the awaiter types or the interfaces that need to be ipmlented by awaitable types, or even the interface used for the state machine created by the compiler, all of these all types also live in this namespace. Caller info attributes is one of those features also introduced in C# 5. 0 that we will take a look at later in this module, but all of the attributes that you will need to use this feature can also be found in this namespace. And finally, friend assemblies, which were introduced in. NET 2. 0 for type forwarding and also the InternalsVisibleToAttribute, which is often used for testing and providing visibility to internal members from test assemblies, does also live in system link or System. Runtime. CompilerServices.