Rather than being an introduction to C# as a programming language text, this book is a very brief and concise text, to be used as a supplemental resource for a lower-level undergraduate class on compiler design. Specifically, it summarizes how C# works as a programming language in a .NET environment and walks the reader through the .NET application execution cycle.
The author starts with an introduction to the basics of Von Neumann architecture and how programming language instructions are executed on the machine. The first three chapters introduce the reader to multiple computer organizational concepts. They first distinguish the differences between the operating system (OS) and the application development environment. Then, they discuss platform dependency, presenting the reasons why a program written for one machine does not execute on another and using it to introduce the concept of a virtual machine. Next, they introduce the common language runtime (CLR) assembly and how CLR is utilized in environments supporting the execution of languages such as C#.
The next two chapters address how the OS manages the CLR application program. In chapter 4, Rahman introduces windows memory management and how CLR uses these services (such as process management, threading, memory management, and so on) to implement its own memory model to allocate memory for the user’s applications. In chapter 5, the author discusses how CLR is mapped on to the concepts introduced in chapter 4, such as the CLR application domain implemented as managed processes and its address spaces, the stack and its address spaces, heaps, objects and object instances, and garbage collection.
Chapters 6 and 7 focus on the execution model. Chapter 6 presents the CLR execution environment, the interplay with assembly, and related processes. In chapter 7, the author addresses just-in-time (JIT) compilation and execution using the virtual execution environment that happens during execution of the assembly.
In summary, this is a very handy resource for students who want to understand the .NET execution lifecycle and the inner workings of how an application program is compiled and executed by the operating system. Since this is a very condensed version, the multiple focused references to other texts at the end of each chapter can be helpful for the inquisitive reader.