Before you start

C# - an interpreted or compiled language?

Now, what is C#. Interpreted or compiled?

The answer is: both.

To understand how this can happen and why this is a Good Thing I need to explain how Mono works.

All Mono languages, including C# are compiled with a compiler by the developer. However the output is not a native binary file, but a special bytecode, called CIL (or IL or MSIL). This bytecode is unreadablebut can not be executed by the computer. It is important to understand, that all Mono languages are compiled to CIL, C# as well as MonoBasic.

The binary file will later be interpreted at runtime by the Mono Executing Engine on the users computer. You may ask now: If it is interpreted anyway, where is the point in compiling it to bytecode first?

The compiling has several consequenses:

Mono does ship a C# compiler (mcs) and an execution engine (mono).