Excerpts from book:

This International Standard specifies the form and establishes the interpretation of programs written in the C# programming language.
It specifies:

* The representation of C# programs;
* The syntax and constraints of the C# language;
* The semantic rules for interpreting C# programs;
* The restrictions and limits imposed by a conforming implementation of C#.

This International Standard does not specify:

* The mechanism by which C# programs are transformed for use by a data-processing system;
* The mechanism by which C# applications are invoked for use by a data-processing system;
* The mechanism by which input data are transformed for use by a C# application;
* The mechanism by which output data are transformed after being produced by a C# application;
* The size or complexity of a program and its data that will exceed the capacity of any specific data-processing system or the capacity of a particular processor;
* All minimal requirements of a data-processing system that is capable of supporting a conforming implementation.


This International Standard is based on a submission from Hewlett-Packard, Intel, and Microsoft, that
described a language called C#, which was developed within Microsoft. The principal inventors of this
language were Anders Hejlsberg, Scott Wiltamuth, and Peter Golde. The first widely distributed
implementation of C# was released by Microsoft in July 2000, as part of its .NET Framework initiative.
Ecma Technical Committee 39 (TC39) Task Group 2 (TG2) was formed in September 2000, to produce a
standard for C#. Another Task Group, TG3, was also formed at that time to produce a standard for a library
and execution environment called Common Language Infrastructure (CLI). (CLI is based on a subset of the
.NET Framework.) Although Microsoft’s implementation of C# relies on CLI for library and runtime
support, other implementations of C# need not, provided they support an alternate way of getting at the
minimum CLI features required by this C# standard (see Annex D).
As the definition of C# evolved, the goals used in its design were as follows:
• C# is intended to be a simple, modern, general-purpose, object-oriented programming language.
• The language, and implementations thereof, should provide support for software engineering principles
such as strong type checking, array bounds checking, detection of attempts to use uninitialized variables,
and automatic garbage collection. Software robustness, durability, and programmer productivity are
important.
• The language is intended for use in developing software components suitable for deployment in
distributed environments.
• Source code portability is very important, as is programmer portability, especially for those
programmers already familiar with C and C++.
• Support for internationalization is very important.
• C# is intended to be suitable for writing applications for both hosted and embedded systems, ranging
from the very large that use sophisticated operating systems, down to the very small having dedicated
functions.
• Although C# applications are intended to be economical with regard to memory and processing power
requirements, the language was not intended to compete directly on performance and size with C or
assembly language.