The most immediately obvious feature of .NET is the runtime, which Microsoft calls the common language runtime. The concept of a runtime is not new to Microsoft technologies—Visual Basic applications have always carried around the baggage of the Visual Basic runtime, and Microsoft’s foray into Java brought about the Microsoft Java Virtual Machine (JVM). But unlike the Visual Basic runtime and the JVM, the .NET runtime is not constrained to a specific language. Both Microsoft and third-party companies have produced several languages that can produce code to run under the .NET runtime. Some, such as C#, are new languages, and others use the syntax of existing languages. Microsoft Visual C++ .NET is an existing language that has been extended to produce .NET code, and these extensions are called the Managed Extensions for C++.
The Managed Extensions allow C++ classes to take advantage of .NET garbage collection and memory protection. More important, they enable C++ code to access the .NET Framework class library and libraries written by any of the other .NET-enabled languages; and other languages can use managed libraries written in C++. No longer do C++ developers need to use myriad technologies such as COM, DLL exported functions, and template libraries to get access to the libraries they need to create a fully featured application; just about all the necessary library code is available as .NET classes in the .NET Framework class library.
The Managed Extensions essentially define a subset of the C++ language—it looks like C++, and it smells like C++, but it is really .NET. You might be asking yourself, “If .NET allows me to choose between a multitude of languages, why should I use C++ to write my .NET code?” C++ has always been a systems language, and it gives you the power and flexibility to produce truly innovative solutions. This ethos has been carried over to the Managed Extensions, in which you have not only the complete features of the .NET runtime and class library but also the full power of the unmanaged language. Indeed, C++ is the only language in which you can mix .NET code and unmanaged code in the same source file. The compiler also allows you to seamlessly access all your unmanaged libraries: static-link libraries, template libraries, COM objects, and DLLs. This easy access means that you can reuse all your existing code and, in the few cases in which the .NET Framework class library does not have suitable classes, use existing unmanaged libraries. Again, no other language gives you these facilities, so no other language can be regarded as the .NET systems language.