The C# language is disarmingly simple, with only about 80 keyword and a dozen
built-in datatypes, but C# is highly expressive, when it comes to implementing
modern programming concepts. C# includes all the support for structured,
component-based, object-oriented programming that one expects of modern language
built on the shoulders of C++ and Java.
The C# language was developed by a small team led by two distinguished Microsoft
engineers, Anders Hejisberg and Scott Wiltamuth. Hejisberg is also known for
creating Turbo Pascal, a popular language for PC programming, and for leading
the team that designed Borland Delphi, one of the first successful integrated
development environment for client/server programming.
All the heart of any object-oriented language is its support for defining and
working with classes. Classes define new types, allowing you to extend the
language to better model the problem you are trying to solve. C# contains
keywords for declaring new classes and their methods and properties, and for
implementing encapsulation, inheritance and polymorphism the three pillars of
object-oriented programming.
In C# everything pertaining to a class declaring is found in the declaration
itself. C# class definitions do not require separate header files or Interface
Definition Language(IDL) files. Moreover, C# supports a new XML style of inline
documentation that greatly simplifies the creation of online and print reference
documentation for an application.
C# also supports interfaces, a means of making a contract with a class for
services that the interface stipulates. In C#, a class can inherit from only a
single parent, but a class can implement multiple interfaces. When it implements
an interfaces, a C# class in effect promises to provide the functionality the
interface specifies.
C# also provides support for structs, a concept whose meaning has changed
significantly from C++. In C#, a struct is restricted, lightweight type that,
when instantiated , makes fewer demand on the operating system and on memory
than a conventional class does. A struct can’t inherit from a class or be
inherited from, but a struct can implement an interfcace.
C# provides component-oriented features, such as a properties, events and
declarative constructs. Component-oriented programming is supported by the CLR’s
support for storing metadata with the code for the class. The metadata describes
the class, including its methods and properties, as well as its security needs
to carry out its functions. A compiled class is thus a self-contained unit,
therefore, a hosting environment that known how to read a class ‘metadata’ and
code needs no other information to make use of it. Using C# and the CLR, it is
possible to add custom metadata to a class by creating custom attributes.
Likewise, it is possible to read class metadata using CLR types that support
reflection. An assembly is a collection of files hat appear to the programmer to
be single dynamic link library or executable. In .NET, an assembly is the basic
unit reuse, visioning, security and deployment. The CLR provides a number of
classes for manipulating assemblies.
A final note about C# is that it also provides support for directly accessing
memory using C++ style and keywords for bracketing such operations as unsafe and
for warning the CLR garbage collector not to collect objects referenced by
pointers until they are released.