1.3 Compilation and the MSIL

In .NET, programs are not compiled into executable files, they
are compiled into
MicrosoftIntermediateLanguage (MSIL) files, which the CLR then
executes. The MSIL (often shortened to IL) files C# produces are
identical to the IL files that other .NET
languages produce; the platform is language-agnostic. A key fact
about the CLR is that it is common: the same
runtime supports development in C# as well as in VB.NET.

C# code is compiled into IL when you build your project. The IL is
saved in a file on disk. When you run your program, the
IL is compiled again, using the
JustInTime (JIT) compiler (a
process often called JITing). The result is
machine code, executed by the machine's processor.

The standard JIT compiler runs ondemand. When a method is called, the JIT
compiler analyzes the IL and produces highly efficient machine code,
which runs very fast. The JIT compiler is smart enough to recognize
when the code has already been compiled, so as the application runs,
compilation happens only as needed. As .NET applications run, they
tend to become faster and faster, as the already compiled code is
reused.

The CLS means that all .NET languages produce very similar IL code.
As a result, objects created in one language can be accessed and
derived from another. Thus it is possible to create a base class in
VB.NET and derive from it in C#.