INTRODUCTION
C# is a simple, modern, general-purpose, object-oriented programming language
developed by Microsoft within its .NET initiative led by Anders Hejlsberg. C#
programming is very much based on C and C++ programming languages, so if you
have basic understanding on C or C++ programming then it will be a fun to learn
C# programming language. C# is a modern, general-purpose, object-oriented
programming language developed by Microsoft and approved by Ecma and ISO. C# was
developed by Anders Hejlsberg and his team during the development of .Net
Framework. C# is designed for Common Language Infrastructure (CLI), which
consists of the executable code and runtime environment that allows use of
various high-level languages to be used on different computer platforms and
architectures.
The following reasons make C# a widely used professional language:
- Modern, general-purpose programming language
- Object oriented.
- Component oriented.
- Easy to learn.
- Structured language.
- It produces efficient programs.
- It can be compiled on a variety of computer platforms.
- Part of .Net Framework.
Overview of the .NET Framework
The .NET Framework is a technology that supports building and running the next
generation of applications and XML Web services. The .NET Framework is designed
to fulfill the following objectives:
- To provide a consistent object-oriented programming environment whether object
code is stored and executed locally, executed locally but Internet-distributed,
or executed remotely.
- To provide a code-execution environment that minimizes software deployment and
versioning conflicts.
- To provide a code-execution environment that promotes safe execution of code,
including code created by an unknown or semi-trusted third party.
- To provide a code-execution environment that eliminates the performance problems
of scripted or interpreted environments.
- To make the developer experience consistent across widely varying types of
applications, such as Windows-based applications and Web-based applications.
- To build all communication on industry standards to ensure that code based on
the .NET Framework can integrate with any other code.
The .NET Framework consists of the common language runtime and the .NET
Framework class library. The common language runtime is the foundation of the
.NET Framework. You can think of the runtime as an agent that manages code at
execution time, providing core services such as memory management, thread
management, and remoting, while also enforcing strict type safety and other
forms of code accuracy that promote security and robustness. In fact, the
concept of code management is a fundamental principle of the runtime. Code that
targets the runtime is known as managed code, while code that does not target
the runtime is known as unmanaged code. The class library is a comprehensive,
object-oriented collection of reusable types that you can use to develop
applications ranging from traditional command-line or graphical user interface
(GUI) applications to applications based on the latest innovations provided by
ASP.NET, such as Web Forms and XML Web services.
The .NET Framework can be hosted by unmanaged components that load the common
language runtime into their processes and initiate the execution of managed
code, thereby creating a software environment that can exploit both managed and
unmanaged features. The .NET Framework not only provides several runtime hosts,
but also supports the development of third-party runtime hosts.
For example, ASP.NET hosts the runtime to provide a scalable, server-side
environment for managed code. ASP.NET works directly with the runtime to enable
ASP.NET applications and XML Web services, both of which are discussed later in
this topic.
Internet Explorer is an example of an unmanaged application that hosts the
runtime (in the form of a MIME type extension). Using Internet Explorer to host
the runtime enables you to embed managed components or Windows Forms controls in
HTML documents. Hosting the runtime in this way makes managed mobile code
possible, but with significant improvements that only managed code can offer,
such as semi-trusted execution and isolated file storage.
The following illustration shows the relationship of the common language runtime
and the class library to your applications and to the overall system. The
illustration also shows how managed code operates within a larger architecture.
The following sections describe the main features of the .NET Framework
in greater detail.
Features of the Common Language Runtime
The common language runtime manages memory, thread execution, code execution,
code safety verification, compilation, and other system services. These features
are intrinsic to the managed code that runs on the common language runtime.
With regards to security, managed components are awarded varying degrees of
trust, depending on a number of factors that include their origin (such as the
Internet, enterprise network, or local computer). This means that a managed
component might or might not be able to perform file-access operations,
registry-access operations, or other sensitive functions, even if it is being
used in the same active application.
The runtime enforces code access security. For example, users can trust that an
executable embedded in a Web page can play an animation on screen or sing a
song, but cannot access their personal data, file system, or network. The
security features of the runtime thus enable legitimate Internet-deployed
software to be exceptionally feature rich.
The runtime also enforces code robustness by implementing a strict
type-and-code-verification infrastructure called the common type system (CTS).
The CTS ensures that all managed code is self-describing. The various Microsoft
and third-party language compilers generate managed code that conforms to the
CTS. This means that managed code can consume other managed types and instances,
while strictly enforcing type fidelity and type safety.
In addition, the managed environment of the runtime eliminates many common
software issues. For example, the runtime automatically handles object layout
and manages references to objects, releasing them when they are no longer being
used. This automatic memory management resolves the two most common application
errors, memory leaks and invalid memory references.
The runtime also accelerates developer productivity. For example, programmers
can write applications in their development language of choice, yet take full
advantage of the runtime, the class library, and components written in other
languages by other developers. Any compiler vendor who chooses to target the
runtime can do so. Language compilers that target the .NET Framework make the
features of the .NET Framework available to existing code written in that
language, greatly easing the migration process for existing applications.
While the runtime is designed for the software of the future, it also supports
software of today and yesterday. Interoperability between managed and unmanaged
code enables developers to continue to use necessary COM components and DLLs.
The runtime is designed to enhance performance. Although the common language
runtime provides many standard runtime services, managed code is never
interpreted. A feature called just-in-time (JIT) compiling enables all managed
code to run in the native machine language of the system on which it is
executing. Meanwhile, the memory manager removes the possibilities of fragmented
memory and increases memory locality-of-reference to further increase
performance.
Finally, the runtime can be hosted by high-performance, server-side
applications, such as Microsoft SQL Server and Internet Information Services
(IIS). This infrastructure enables you to use managed code to write your
business logic, while still enjoying the superior performance of the industry's
best enterprise servers that support runtime hosting.
.Net Framework Class Library
The .NET Framework class library is a collection of reusable types that tightly
integrate with the common language runtime. The class library is object
oriented, providing types from which your own managed code can derive
functionality. This not only makes the .NET Framework types easy to use, but
also reduces the time associated with learning new features of the .NET
Framework. In addition, third-party components can integrate seamlessly with
classes in the .NET Framework.
For example, the .NET Framework collection classes implement a set of interfaces
that you can use to develop your own collection classes. Your collection classes
will blend seamlessly with the classes in the .NET Framework.
As you would expect from an object-oriented class library, the .NET Framework
types enable you to accomplish a range of common programming tasks, including
tasks such as string management, data collection, database connectivity, and
file access. In addition to these common tasks, the class library includes types
that support a variety of specialized development scenarios. For example, you
can use the .NET Framework to develop the following types of applications and
services:
- Console applications. See Building Console Applications in the .NET Framework.
- Windows GUI applications (Windows Forms). See Windows Forms.
- Windows Presentation Foundation (WPF) applications. See Introduction to WPF.
- ASP.NET applications. See Developing Web Applications with ASP.NET.
- Windows services. See Introduction to Windows Service Applications.
- Service-oriented applications using Windows Communication Foundation (WCF). See
Developing Service-Oriented Applications with WCF.
- Workflow-enabled applications using Windows Workflow Foundation (WF). See
Building Workflows in the .NET Framework.
For example, the Windows Forms classes are a comprehensive set of reusable types
that vastly simplify Windows GUI development. If you write an ASP.NET Web Form
application, you can use the Web Forms classes.