1.4 .NET Framework
Now that
you are familiar with the major goals of the .NET Framework,
let's briefly examine its
architecture. As you can see in
Figure 1-2, the .NET Framework sits on top of the
operating system, which can be a few different flavors of Windows and
consists of a number of components (each of these components is
discussed in greater detail starting with Chapter 4,
as described in the Preface). .NET is essentially a system
application that runs on Windows.
Figure 1-2. The .NET Framework

The most important component of the framework is the
CLR. If you are a Java programmer,
think of the CLR as the .NET equivalent of the
Java Virtual Machine (JVM). If you
don't know Java, think of the CLR as the heart and
soul of the .NET architecture. At a high level, the CLR activates
objects, performs security checks on them, lays them out in memory,
executes them, and garbage-collects them.Conceptually, the CLR and the JVM are similar in that they are both
runtime infrastructures that abstract the underlying platform
differences. However, while the JVM officially supports only the Java
language, the CLR supports any language that can be represented in
its Common
Intermediate Language (CIL). The JVM executes bytecode, so it can, in
principle, support many languages, too. Unlike
Java's bytecode, though, CIL is never interpreted.
Another conceptual difference between the two infrastructures is that
Java code runs on any platform with a JVM, whereas .NET code runs
only on platforms that support the CLR. In April, 2003, the
International Organization for Standardization and the International
Electrotechnical Committee (ISO/IEC) recognized a functional subset
of the CLR, known as the Common Language
Interface (CLI), as an
international standard. This development, initiated by Microsoft and
developed by ECMA International, a European standards organization,
opens the way for third parties to implement their own versions of
the CLR on other platforms, such as Linux or Mac OS X. For
information on third-party and open source projects working to
implement the ISO/IEC CLI and C# specifications, see Appendix A.In Figure 1-2, the layer on top of the CLR is a set
of framework base classes. This set of classes is similar to the set
of classes found in STL, MFC, ATL, or Java. These classes support
rudimentary input and output functionality, string manipulation,
security management, network communications, thread management, text
management, reflection functionality, collections functionality, as
well as other functions.On top of the framework base classes is a set of classes that extend
the base classes to support data management and XML manipulation.
These classes, called ADO.NET, support persistent data
managementdata that is stored on backend databases. Alongside
the data classes, the .NET Framework supports a number of classes to
let you manipulate XML data and perform XML searching and XML
translations.Classes in three different technologies (including web services, Web
Forms, and Windows Forms) extend the framework base classes and the
data and XML classes. Web services include a number of classes that
support the development of lightweight distributed components, which
work even in the face of firewalls and NAT software. These components
support plug-and-play across the Internet, because web services
employ standard HTTP and SOAP.Web
Forms,
the key technology behind ASP.NET, include a number of classes that
allow you to rapidly develop web Graphical User
Interface (GUI) applications. If you're currently
developing web applications with Visual Interdev, you can think of
Web Forms as a facility that allows you to develop
web
GUIs using the same drag-and-drop approach as if you were
developing the GUIs in Visual Basic. Simply drag-and-drop controls
onto your Web Form, double-click on a control, and write the code to
respond to the associated event.Windows Forms support a set of classes that allow you to develop
native Windows GUI applications. You can think of these classes
collectively as a much better version of the MFC in C++ because they
support easier and more powerful GUI development and provide a
common, consistent interface that can be used in all languages.In the next chapter, we examine the internals of the CLR and how it
supports and executes .NET components, formally called
assemblies in .NET.