CLR via C# is one of the books that should be considered to be read by experienced .NET software engineer. I would not recommend this position to fresh software engineer. This book touches many (if not all) advanced areas in .NET framework up to 4.0. Jeffrey describes how C# language is implemented the way it is or why C# compiler works as it works (i.e. why it uses callvirt IL instruction, instead of call IL instruction, when calling a non-virtual instance method). In several places author has good arguments in hand to criticize .NET development team for that how they have implemented some CLR features (i.e. Exceptions mechanism) :)
Book is divided in 5 parts:
- CLR Basics (basic information about how CLR, assemblies, namespaces etc. are organized and working together)
- Designing Types (describes type inheritance model, classes, fields, methods, events, parameters, properties, generics and interfaces in all possible ways the can be used in C# and how the fit into CLR)
- Essential Types (deep study of System.String, Arrays, Delegates, Custom Attributes and Nullable Value Types)
- Core Facilities (this is one of the most important parts. Jeffrey describes in details Exceptions and State Management, Garbage Collection, CLR Hostiong and AppDomains, Assembly Loading and Reflection, Runtime Serialization)
- Threading (described how to write multi-threaded application.Thread basics, Synchronous and Asynchronous Operation, Hybrid Thread Synchronization Constructs) After reading this book I understood that there were many things in .NET that I had no idea about or I didn’t know how they work internally (like Garbage Collector). Especially parts 4 and 5 are very valuable to be read.
The 3rd Edition was extended with new features available in .NET 4.0, i.e. :
- dynamic keyword (System.Dynamic)
- System.Tuple class
- System.Threading.Tasks namespace
- and many more…