C# Language Orientation
C# and Visual C# for Certification, Development, and Training
What is C# anyway?
C# is an object-oriented programming language developed by Microsoft Corporation as part of their .NET initiative in response to the success of Sun Microsystems' Java programming language. C# source code—as well as those of other .NET languages—is compiled into an intermediate byte code called Microsoft Intermediate Language (MSIL).
Primarily, C# is a hybrid of the C, C++, and Java programming languages with some features of Microsoft Visual Basic thrown into the mix. Like its Java ancestor, C# features automatic garbage collection (GC), scalability, simplified type declarations, type safety, and versioning support plus a few new features for Microsoft COM+ and Web services development.
Hewlett-Packard, Intel, and Microsoft submitted the Microsoft C# Specification to both European Computer Manufacturers Association (ECMA) and the International Standards Organization (ISO). In time, it was approved as a standard by ECMA and called the Standard ECMA-334 C# Language Specification. The C# language was architected by Anders Hejlsberg—a Delphi designer—, Scott Wiltamuth, and Peter Golde.
You will notice that we sometimes use the term "CSharp" instead of "C#". Unfortunately, some software cannot handle the sharp sign (#) in certain contexts. For example, this wiki software cannot handle the sharp sign in internal links. Therefore, we use "CSharp" when necessary. The two terms are synonymous.
Overview of the C# Language
C# is an object-oriented programming language developed by Microsoft Corporation as part of their .NET initiative in response to the success of Sun Microsystems' Java programming language. C# source code—as well as those of other .NET languages—is compiled into an intermediate byte code called MSIL (Microsoft Intermediate Language. C# is primarily derived from the C, C++, and Java programming languages with some features of Microsoft's Visual Basic in the mix.
C# is used to develop applications for the Microsoft .NET environment. .NET offers an alternative to Java development. Microsoft's Visual Studio .NET development environment incorporates several different languages including ASP.NET, C#, C++, and J# (Microsoft Java for .NET), all of which compile to the Common Language Runtime.
C# language has gone through several interations of adding new features:
|Version||Language specification||Date||.NET Framework||Visual Studio .NET|
|C# 1.0||December 2002||April 2003||January 2002||January 2002||.NET Framework 1.0||Visual Studio .NET 2002|
|C# 1.2||October 2003||April 2003||.NET Framework 1.1||Visual Studio .NET 2003|
|C# 2.0||June 2006||September 2006||September 2005||November 2005||.NET Framework 2.0||Visual Studio .NET 2005|
|C# 3.0||None||August 2007||November 2007||
.NET Framework 2.0 (Except LINQ/Query Extensions)
.NET Framework 3.0 (Except LINQ/Query Extensions)
.NET Framework 3.5
| Visual Studio 2008|
Visual Studio 2010
|C# 4.0||April 2010||April 2010||.NET Framework 4||Visual Studio .NET 2010|
|C# 5.0||June 2013||August 2012||.NET Framework 4.5||Visual Studio .NET 2012|
The Microsoft C# 2.0 specification contains only the new C# 2.0 features. To reference older features, consult the 1.2 specification.
There are no ECMA or ISO/IEC specifications for C# 3.0, 4.0, and 5.0.
|C# Versions and Features Summary|
|C# 2.0||C# 3.0||C# 4.0||C# 5.0|
C# design goals
According to the Introduction to the Standard ECMA-334 C# Language Specification:
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.
C# 2.0 new language features
New Features in C# 2.0 - twelve "labs" which cover only the new C# 2.0 features.
- A new form of iterator employs co-routines via a functional-style
yieldkeyword similar to the one found in the Python language.
- Anonymous methods provide closure functionality.
- Generics or parameterized types support some features not supported by C++ templates such as type constraints on generic parameters. However, expressions cannot be used as generic parameters as in C++ templates. In contrast to the Java implementation, parameterized types are first class objects in the virtual machine, allowing for optimizations and preservation of type information.
- Nullable value types facilitate interaction with SQL databases. Sample nullable type declaration:
int? variableName = null;
- Partial types allow the separation of a class implementation into more than one source file. This feature was implemented primarily so Visual Studio generated code can be kept seperate from developer code.
C# 3.0 new language features
C# version 3.0 introduces several language extensions to support higher order, functional style class libraries. The extensions enable the construction of compositional APIs with the expressive power of query languages in areas such as relational databases and XML. C# 3.0 will include the following new features:
- Anonymous types: tuple types automatically inferred and created from object initializers.
- Object initializers ease construction and initialization of objects.
- Implicitly typed local variables permit the type of local variables to be inferred from the expressions used to initialize them.
- Implicitly typed arrays: a form of array creation and initialization that infers the element type of the array from an array initializer.
- Extension methods make it possible to extend existing types and constructed types with additional methods.
- Lambda expressions: an evolution of anonymous methods providing improved type inference and conversions to both delegate types and expression trees.
- Expression trees permit lambda expressions to be represented as data (expression trees) instead of as code (delegates).
- Query expressions provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery.
Microsoft C# developers note that C# 3.0 is bytecode compatible with C# version 2.0. For the most part, enhancements comprise purely syntactic or compile-time improvements. For example, many of the most common integrated queries can already be implemented using anonymous delegates in combination with predicate-based container methods such as
A Brief History of C#
C# was designed for developing components in a fully object-oriented manner as part of the Microsoft .NET initiative. C# debuted in the year 2000 at the Professional Developers Conference (PDC) where Microsoft founder Bill Gates was the keynote speaker. At the same time, Visual Studio .NET was announced.
The primary architects of C# were Peter Golde, Eric Gunnerson, Anders Hejlsberg, Peter Sollichy, and Scott Wiltamuth. Of these, the principal designer of the the C# language was Anders Hejlsberg, a lead architect at Microsoft. Previously, he was a framework designer with experience with Visual J++ (Microsoft's old version of the Java language), Delphi, and Turbo Pascal.
Both C# and the Common Language Infrastructure (CLI) have been submitted to international standards organizations European Computer Manufacturers Association (ECMA) and International Organization for Standardization (ISO) / International Electrotechnical Commission (IEC).
The Java Connection
You will find that many C# books and sources ignore or minimize the role of the Java language in the development of C# and .NET, as if it were all Microsoft's original idea. This view is prevalent in exclusively Microsoft shops. However, the fact is that Microsoft was a latecomer to Internet development and the oft cited pedigree of C# from C and C++ applies equally well to the Java language, which preceded C# by some five years. Microsoft and Sun Microsystems have a long history of legal struggle over control of the Java language, a battle which Sun finally won. Prevented from adapting the Java language to the Windows platform, Microsoft decided to go its own way using its own version of the Java system—namely C# and .NET. The influence of the Java language on C# and other languages takes nothing away from C#, which in some ways improves upon its ancestor.
- Check out the best C# books on Amazon.