To understand how the
common language runtime manages code execution, you must examine the structure
of a .NET application. The primary unit of a .NET application is the assembly. An assembly is a self-describing collection of
code, resources, and metadata. The assembly manifest
contains information about what is contained within the assembly. The assembly
manifest provides:
·
Identity information, such as
the assembly’s name and version number
·
A list of all types exposed by
the assembly
·
A list of other assemblies
required by the assembly
·
A list of code access security
instructions, including permissions required by the assembly and permissions to
be denied the assembly
Each assembly has one
and only one assembly manifest, and it contains all the description information
for the assembly. However, the assembly manifest can be contained in its own
file or within one of the assembly’s modules.
An assembly contains
one or more modules. A module contains the code that makes up your application
or library, and it contains metadata that describes that code. When you compile
a project into an assembly, your code is converted from high-level code to IL.
Because all managed code is first converted to IL code, applications written in
different languages can easily interact. For example, one developer might write
an application in Visual C# that accesses a DLL in Visual Basic .NET. Both
resources will be converted to IL modules before being executed, thus avoiding
any language-incompatibility issues.
Each module also
contains a number of types. Types are templates that describe a set of data
encapsulation and functionality. There are two kinds of types: reference types
(classes) and value types (structures). These types are discussed in greater
detail in Lesson 2 of this chapter. Each type is described to the common
language runtime in the assembly manifest. A type can contain fields,
properties, and methods, each of which should be related to a common
functionality. For example, you might have a class that represents a bank
account. It contains fields, properties, and methods related to the functions
needed to implement a bank account. A field represents storage of a particular
type of data. One field might store the name of an account holder, for example.
Properties are similar to fields, but properties usually provide some kind of
validation when data is set or retrieved. You might have a property that
represents an account balance. When an attempt is made to change the value, the
property can check to see if the attempted change is greater than a
predetermined limit. If the value is greater than the limit, the property does
not allow the change. Methods represent behavior, such as actions taken on data
stored within the class or changes to the user interface. Continuing with the
bank account example, you might have a Transfer
method that transfers a balance from a checking account to a savings account,
or an Alert method that warns users when
their balances fall below a predetermined level.
Overview of the .NET Framework
The .NET Framework is
a managed type-safe environment for application development and execution. The
.NET Framework manages all aspects of your program’s execution. It allocates
memory for the storage of data and instructions, grants or denies the
appropriate permissions to your application, initiates and manages application
execution, and manages the reallocation of memory from resources that are no
longer needed. The .NET Framework consists of two main components: the common
language runtime and the .NET Framework class library.
The common language
runtime can be thought of as the environment that manages code execution. It
provides core services, such as code compilation, memory allocation, thread
management, and garbage collection. Through the common type system (CTS), it
enforces strict type-safety and ensures that code is executed in a safe environment
by also enforcing code access security.
The .NET Framework
class library provides a collection of useful and reusable types that are
designed to integrate with the common language runtime. The types provided by
the .NET Framework are object-oriented and fully extensible, and they allow you
to seamlessly integrate your applications with the .NET Framework.
Languages
and the .NET Framework:
The .NET Framework is
designed for cross-language compatibility, which means, simply, that .NET
components can interact with each other no matter what supported language they
were written in originally. So, an application written in Microsoft Visual Basic .NET might reference a dynamic-link
library (DLL) file written in Microsoft Visual C#, which in turn might access a
resource written in managed Microsoft Visual C++ or any other .NET language.
This language interoperability extends to full object-oriented inheritance. A
Visual Basic .NET class might be derived from a C# class, for example, or vice
versa.
This level of
cross-language compatibility is possible because of the common language
runtime. When a .NET application is compiled, it is converted from the language
in which it was written (Visual Basic .NET, C#, or any other .NET-compliant
language) to Microsoft Intermediate Language (MSIL or IL). MSIL is a low-level
language that the common language runtime can read and understand. Because all
.NET executables and DLLs exist as MSIL, they can freely interoperate. The
Common Language Specification (CLS) defines the minimum standards to which .NET
language compilers must conform. Thus, the CLS ensures that any source code
successfully compiled by a .NET compiler can interoperate with the .NET
Framework.
The CTS ensures type
compatibility between .NET components. Because .NET applications are converted
to IL prior to deployment and execution, all primitive data types are
represented as .NET types. Thus, a Visual Basic Integer
and a C# int are both represented in IL code
as a System.Int32. Because both languages use
a common type system, it is possible to transfer data between components and
avoid time-consuming conversions or hard-to-find errors.
Visual Studio
.NET ships with languages such as Visual Basic .NET, Visual
C#, and Visual C++ with managed
extensions, as well as the JScript scripting
language. You can also write managed code for the .NET Framework in other
languages. Third-party tools and compilers exist for FORTRAN, COBOL, Perl, and
a host of other languages. All of these languages share the same cross-language
compatibility and inheritability.
No comments:
Post a Comment
Thank you for your valuable comment. Stay tuned for Updates.