Traditional Software
Traditional software, written in a programming language like C or C++, is transformed from source code into machine code by a compiler, producing a so-called binary (usually with file extensions like .dll, .exe or .so).
This binary can then be run by the end-user as long as his CPU understands the machine code instructions and his operating system provides the external functions used.
So these binaries are bound to a single platform
(= operating system and CPU architecture). A Windows
binary compiled for x86 CPUs won't work on
Linux. At least not without some kind of
emulation software that tries to simulate the platform
expected by the binary.
.NET
Source code written in a .NET enabled language is instead compiled to an intermediate format called CIL (Common Intermediate Language). This language is independent of any CPU architecture. Only when a CIL binary is executed does it get transformed into actual machine code by the platform's .NET runtime.
This means that you can copy a CIL binaries to other computers running a 64 bit OS, Linux, MacOS or even your mobile phone. Their respective .NET runtime (eg. the Microsoft .NET Framework or Mono) will generate suitable machine code in the instant you attempt to launch the program.
So as to not rely on external functions that are operating system
specific, .NET defines an extensive class library called the
.NET Framework that interfaces with the underlying platform
and provides .NET programmers with a clean and unified interface.
In other words, a .NET program only interfaces with the .NET Framework
and then the platform's respective implementation of the .NET Framework
does the operations needed by calling into platform dependent code.
.NET Advantages
-
Language Interoperability
Since all .NET-enabled programming languages work through CIL, any .NET language can interface with any other .NET language.
No more wrapper-writing and searching for language bindings. -
Portability
Thanks to Mono and other porting efforts such as DotGnu, software written in pure .NET can be run on many platforms as-is. In fact, any pure .NET 1.1 oder .NET 2.0 application can already be run under linux without modifications. -
Reusability
Once compiled, a .NET assembly (the .NET equivalent of a .dll/.so) is self-describing. Just reference a .NET assembly in your project and you will have access to all its exposed classes.
No more hazzle with headers, DLL import libraries and compiler options anymore.
In short, .NET is just more fun because you can start coding right away. All the quirks are gone. As a beginner, you will have an easier learning experience. As a seasoned programmer, you still have all the power, but you don't have to spend time explaining complicated stuff to newbies ;)