C Sharp (Programming Language)

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11
At a glance
Powered by AI
C# is a multi-paradigm programming language developed by Microsoft for the .NET framework. It supports concepts like strong typing, object-oriented programming, functional programming, and generic programming.

The design goals of C# included being a simple, modern, general-purpose language that supports software engineering principles and is suitable for both large and small applications across different systems.

C# was originally developed under the name 'Cool' and was later renamed. It was influenced by languages like C++, Java and Delphi. While initially similar to Java, C# has evolved to be more distinct with features like generics implemented differently.

C Sharp (programming language)

C#[note 2] (pronounced as see sharp) is a multi-paradigm


programming language encompassing strong typing,
imperative, declarative, functional, generic, objectoriented (class-based), and component-oriented programming disciplines. It was developed by Microsoft
within its .NET initiative and later approved as a standard
by Ecma (ECMA-334) and ISO (ISO/IEC 23270:2006).
C# is one of the programming languages designed for the
Common Language Infrastructure.

2 History

C#'s principal designer and lead architect at Microsoft is


Anders Hejlsberg, who was previously involved with the
design of Turbo Pascal, Embarcadero Delphi (formerly
CodeGear Delphi, Inprise Delphi and Borland Delphi),
and Visual J++. In interviews and technical papers he has
stated that aws in most major programming languages
(e.g. C++, Java, Delphi, and Smalltalk) drove the fundamentals of the Common Language Runtime (CLR),
which, in turn, drove the design of the C# language itself.

During the development of the .NET Framework,


the class libraries were originally written using a
managed code compiler system called Simple Managed C
(SMC).[11][12] In January 1999, Anders Hejlsberg formed
a team to build a new language at the time called Cool,
which stood for C-like Object Oriented Language.[13]
Microsoft had considered keeping the name Cool as the
C# is a general-purpose, object-oriented programming nal name of the language, but chose not to do so for
language.[9] Its development team is led by Anders Hejls- trademark reasons. By the time the .NET project was
berg. The most recent version is C# 6.0 which was re- publicly announced at the July 2000 Professional Developers Conference, the language had been renamed C#,
leased in 2015.[10]
and the class libraries and ASP.NET runtime had been
ported to C#.

Design goals

The ECMA standard lists these design goals for C#:[9]


The C# language is intended to be a simple, modern, general-purpose, object-oriented programming
language.
The language, and implementations there of, 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.

James Gosling, who created the Java programming language in 1994, and Bill Joy, a co-founder of Sun Microsystems, the originator of Java, called C# an imitation of Java; Gosling further said that "[C# is]
sort of Java with reliability, productivity and security
deleted.[14][15] Klaus Kreft and Angelika Langer (authors of a C++ streams book) stated in a blog post
that Java and C# are almost identical programming
languages. Boring repetition that lacks innovation,[16]
Hardly anybody will claim that Java or C# are revolutionary programming languages that changed the way we
write programs, and C# borrowed a lot from Java - and
vice versa. Now that C# supports boxing and unboxing,
we'll have a very similar feature in Java.[17] In July 2000,
Anders Hejlsberg said that C# is not a Java clone and is
much closer to C++" in its design.[18]

The language is intended for use in developing


software components suitable for deployment in distributed environments.
Portability is very important for source code and
programmers, especially those 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 Since the release of C# 2.0 in November 2005, the C# and
Java languages have evolved on increasingly divergent trafunctions.
jectories, becoming somewhat less similar. One of the
Although C# applications are intended to be eco- rst major departures came with the addition of generics
nomical with regard to memory and processing to both languages, with vastly dierent implementations.
power requirements, the language was not intended C# makes use of reication to provide rst-class generic
to compete directly on performance and size with C objects that can be used like any other class, with code
or assembly language.
generation performed at class-load time.[19] Furthermore,
1

C# has added several major features to accommodate


functional-style programming, culminating in the LINQ
extensions released with C# 3.0 and its supporting framework of lambda expressions, extension methods, and
anonymous types.[20] These features enable C# programmers to use functional programming techniques, such as
closures, when it is advantageous to their application. The
LINQ extensions and the functional imports help developers reduce the amount of boilerplate code that is included in common tasks like querying a database, parsing
an xml le, or searching through a data structure, shifting the emphasis onto the actual program logic to help
improve readability and maintainability.[21]
C# used to have a mascot called Andy (named after
Anders Hejlsberg). It was retired on January 29, 2004.[22]
C# was originally submitted to the ISO subcommittee JTC 1/SC 22 for review,[23] under ISO/IEC
23270:2003,[24] was withdrawn and was then approved
under ISO/IEC 23270:2006.[25]

However, when it is practical to do so (for example, in


advertising or in box art[29] ), Microsoft uses the intended
musical symbol.
The sharp sux has been used by a number of other
.NET languages that are variants of existing languages,
including J# (a .NET language also designed by Microsoft that is derived from Java 1.1), A# (from Ada), and
the functional programming language F#.[30] The original
implementation of Eiel for .NET was called Eiel#,[31]
a name retired since the full Eiel language is now supported. The sux has also been used for libraries, such
as Gtk# (a .NET wrapper for GTK+ and other GNOME
libraries) and Cocoa# (a wrapper for Cocoa).

2.2 Versions

2.3 Features added in versions


2.1

Name

2.3.1 C# 2.0
Generics[34]
Partial types[34]
Anonymous methods[34]
Iterators[34]
Nullable types[34]
Getter/setter separate accessibility[34]
Method group conversions (delegates)[34]
Co- and Contra-variance for delegates[34]
Static classes[34]

C-sharp musical note

Delegate inference[34]

The name C sharp was inspired by musical notation 2.3.2 C# 3.0


where a sharp indicates that the written note should be
Implicitly typed local variables[35]
made a semitone higher in pitch.[26] This is similar to the
language name of C++, where "++" indicates that a vari Object and collection initializers[35]
able should be incremented by 1. The sharp symbol also
resembles a ligature of four "+" symbols (in a two-by-two
Auto-Implemented properties[35]
grid), further implying that the language is an increment
Anonymous types[35]
of C++.[27]
Due to technical limitations of display (standard fonts,
browsers, etc.) and the fact that the sharp symbol
(U+266F MUSIC SHARP SIGN (HTML ♯))
is not present on the standard keyboard, the number sign
(U+0023 # NUMBER SIGN (HTML #)) was chosen to represent the sharp symbol in the written name
of the programming language.[28] This convention is reected in the ECMA-334 C# Language Specication.[9]

HISTORY

Extension methods[35]
Query expressions[35]
Lambda expressions[35]
Expression trees[35]
Partial methods[36]

3
2.3.3

3 Syntax

C# 4.0

Dynamic binding[37]

Main article: C Sharp syntax


See also: Syntax (programming languages)

Named and optional arguments

[37]

Generic co- and contravariance[37]


Embedded interop types (NoPIA)
2.3.4

[37]

Semicolons are used to denote the end of a statement.

C# 5.0[38]

Asynchronous methods[39]
Caller info attributes[39]
2.3.5

The core syntax of C# language is similar to that of other


C-style languages such as C, C++ and Java. In particular:

Curly brackets are used to group statements. Statements are commonly grouped into methods (functions), methods into classes, and classes into
namespaces.
Variables are assigned using an equals sign, but compared using two consecutive equals signs.

C# 6.0

Compiler-as-a-service (Roslyn)
Import of static type members into namespace[40]
Exception lters[40]
Await in catch/nally blocks[40]

Square brackets are used with arrays, both to declare


them and to get a value at a given index in one of
them.

4 Distinguishing features

Auto property initializers

[40]

Default values for getter-only properties[40]


Expression-bodied members[40]
Null propagator (null-conditional operator, succinct
null checking)[40]
String Interpolation[40]

See also: Comparison of C Sharp and Java


Some notable features of C# that distinguish it from C,
C++, and Java where noted, are:

4.1 Portability

By design, C# is the programming language that most


directly reects the underlying Common Language Infrastructure (CLI).[42] Most of its intrinsic types corre Dictionary initializer[40]
spond to value-types implemented by the CLI framework. However, the language specication does not state
2.3.6 C# 7.0 [41] *Planned features currently in de- the code generation requirements of the compiler: that is,
velopment
it does not state that a C# compiler must target a Common Language Runtime, or generate Common Interme Binary Literals
diate Language (CIL), or generate any other specic format. Theoretically, a C# compiler could generate ma Digit Separators
chine code like traditional compilers of C++ or Fortran.
Local Functions
nameof operator[40]

Type switch

4.2 Typing

Ref Returns

C# supports strongly typed implicit variable declarations


with the keyword var, and implicitly typed arrays with the
keyword new[] followed by a collection initializer.

Tuples
Out var
Pattern Matching
Arbitrary async returns
Records

C# supports a strict Boolean data type, bool. Statements


that take conditions, such as while and if, require an expression of a type that implements the true operator, such
as the Boolean type. While C++ also has a Boolean type,
it can be freely converted to and from integers, and expressions such as if(a) require only that a is convertible

4 DISTINGUISHING FEATURES

to bool, allowing a to be an int, or a pointer. C# disallows this integer meaning true or false approach, on the
grounds that forcing programmers to use expressions that
return exactly bool can prevent certain types of programming mistakes such as if (a = b) (use of assignment =
instead of equality ==, which while not an error in C or
C++, will be caught by the compiler anyway).
C# is more type safe than C++. The only implicit conversions by default are those that are considered safe, such as
widening of integers. This is enforced at compile-time,
during JIT, and, in some cases, at runtime. No implicit
conversions occur between Booleans and integers, nor between enumeration members and integers (except for literal 0, which can be implicitly converted to any enumerated type). Any user-dened conversion must be explicitly marked as explicit or implicit, unlike C++ copy constructors and conversion operators, which are both implicit by default.

rounding publish-subscribe style events, though C# uses


delegates to do so.
C#
oers
Java-like
synchronized
method
calls,
via
the
attribute
[MethodImpl(MethodImplOptions.Synchronized)], and has
support for mutually-exclusive locks via the keyword
lock.

4.5 Property
C# provides properties as syntactic sugar for a common
pattern in which a pair of methods, accessor (getter)
and mutator (setter) encapsulate operations on a single
attribute of a class. No redundant method signatures for
the getter/setter implementations need be written, and the
property may be accessed using attribute syntax rather
than more verbose method calls.

C# has explicit support for covariance and contravariance


in generic types, unlike C++ which has some degree of
support for contravariance simply through the semantics
of return types on virtual methods.
4.6 Namespace
Enumeration members are placed in their own scope.
The C# language does not allow for global variables or A C# namespace provides the same level of code isolation
functions. All methods and members must be declared as a Java package or a C++ namespace, with very similar
within classes. Static members of public classes can sub- rules and features to a package.
stitute for global variables and functions.
Local variables cannot shadow variables of the enclosing
4.7
block, unlike C and C++.

4.3

Meta programming

Meta programming via C# attributes is part of the language. Many of these attributes duplicate the functionality of GCCs and VisualC++'s platform-dependent preprocessor directives.

4.4

Methods and functions

Memory access

In C#, memory address pointers can only be used within


blocks specically marked as unsafe, and programs with
unsafe code need appropriate permissions to run. Most
object access is done through safe object references,
which always either point to a live object or have the
well-dened null value; it is impossible to obtain a reference to a dead object (one that has been garbage collected), or to a random block of memory. An unsafe
pointer can point to an instance of a value-type, array,
string, or a block of memory allocated on a stack. Code
that is not marked as unsafe can still store and manipulate pointers through the System.IntPtr type, but it cannot
dereference them.

Like C++, and unlike Java, C# programmers must use


the keyword virtual to allow methods to be overridden by
subclasses.
Managed memory cannot be explicitly freed; instead, it is
Extension methods in C# allow programmers to use static automatically garbage collected. Garbage collection admethods as if they were methods from a classs method dresses the problem of memory leaks by freeing the protable, allowing programmers to add methods to an object grammer of responsibility for releasing memory that is no
that they feel should exist on that object and its deriva- longer needed.
tives.
The type dynamic allows for run-time method binding, allowing for JavaScript-like method calls and run-time ob- 4.8
ject composition.

Exception

C# has support for strongly-typed function pointers via Checked exceptions are not present in C# (in contrast to
the keyword delegate. Like the Qt frameworks pseudo- Java). This has been a conscious decision based on the
C++ signal and slot, C# has semantics specically sur- issues of scalability and versionability.[43]

5.2

Boxing and unboxing

4.9

Polymorphism

Unlike C++, C# does not support multiple inheritance, although a class can implement any number of interfaces.
This was a design decision by the languages lead architect to avoid complication and simplify architectural requirements throughout CLI. When implementing multiple interfaces that contain a method with the same signature, C# allows implementing each method depending
on which interface that method is being called through,
or, like Java, allows implementing the method once, and
have that be the one invocation on a call through any of
the classs interfaces.
However, unlike Java, C# supports operator overloading.
Only the most commonly overloaded operators in C++
may be overloaded in C#.

4.10 Functional programming

5
an explicit default (parameterless) constructor. Examples of value types are all primitive types, such as int
(a signed 32-bit integer), oat (a 32-bit IEEE oatingpoint number), char (a 16-bit Unicode code unit), and
System.DateTime (identies a specic point in time with
nanosecond precision). Other examples are enum (enumerations) and struct (user dened structures).
In contrast, reference types have the notion of referential
identity - each instance of a reference type is inherently
distinct from every other instance, even if the data within
both instances is the same. This is reected in default
equality and inequality comparisons for reference types,
which test for referential rather than structural equality,
unless the corresponding operators are overloaded (such
as the case for System.String). In general, it is not always
possible to create an instance of a reference type, nor to
copy an existing instance, or perform a value comparison on two existing instances, though specic reference
types can provide such services by exposing a public constructor or implementing a corresponding interface (such
as ICloneable or IComparable). Examples of reference
types are object (the ultimate base class for all other C#
classes), System.String (a string of Unicode characters),
and System.Array (a base class for all C# arrays).

Though primarily an imperative language, C# 2.0 oered


limited support for functional programming through rstclass functions and closures in the form of anonymous
delegates. C# 3.0 expanded support for functional programming with the introduction of a lightweight synBoth type categories are extensible with user-dened
tax for lambda expressions, extension methods (an aortypes.
dance for modules), and a list comprehension syntax in
the form of a query comprehension language.

Common type system

5.2 Boxing and unboxing

Boxing is the operation of converting a value-type object


C# has a unied type system. This unied type system is into a value of a corresponding reference type.[44] Boxing
called Common Type System (CTS).[44]
in C# is implicit.
A unied type system implies that all types, including Unboxing is the operation of converting a value of a refprimitives such as integers, are subclasses of the Sys- erence type (previously boxed) into a value of a value
tem.Object class. For example, every type inherits a type.[44] Unboxing in C# requires an explicit type cast.
ToString() method.
A boxed object of type T can only be unboxed to a T (or
a nullable T).[45]

5.1

Categories of data types

CTS separates data types into two categories:[44]

Example:
int foo = 42; // Value type. object bar = foo; // foo is
boxed to bar. int foo2 = (int)bar; // Unboxed back to
value type.

1. Reference types
2. Value types
Instances of value types do not have referential identity
nor referential comparison semantics - equality and inequality comparisons for value types compare the actual
data values within the instances, unless the corresponding operators are overloaded. Value types are derived
from System.ValueType, always have a default value, and
can always be created and copied. Some other limitations on value types are that they cannot derive from each
other (but can implement interfaces) and cannot have

6 Libraries
The C# specication details a minimum set of types and
class libraries that the compiler expects to have available.
In practice, C# is most often used with some implementation of the Common Language Infrastructure (CLI),
which is standardized as ECMA-335 Common Language
Infrastructure (CLI).

Examples

IMPLEMENTATIONS

A GUI example:

using System.Windows.Forms; class Program { static


The following is a very simple C# program, a version of void Main(string[] args) { MessageBox.Show(Hello,
world!"); } }
the classic "Hello world" example:
using System; class Program { static void Main(String[]
This example is similar to the previous example, except
args) { Console.WriteLine(Hello, world!"); } }
that it generates a dialog box that contains the message
Hello, world!" instead of writing it to the console.
The eect is to write the following text to the output console:
Hello, world!
Each line has a purpose:
using System;
The above line of code tells the compiler to use System
as a candidate prex for types used in the source code.
In this case, when the compiler sees use of the Console
type later in the source code, it tries to nd a type named
Console, rst in the current assembly, followed by all referenced assemblies. In this case the compiler fails to nd
such a type, since the name of the type is actually System.Console. The compiler then attempts to nd a type
named System.Console by using the System prex from
the using statement, and this time it succeeds. The using
statement allows the programmer to state all candidate
prexes to use during compilation instead of always using full type names.
class Program

8 Standardization and licensing


In August 2001, Microsoft Corporation, HewlettPackard and Intel Corporation co-sponsored the submission of specications for C# as well as the Common
Language Infrastructure (CLI) to the standards organization Ecma International. In December 2001, ECMA
released ECMA-334 C# Language Specication. C# became an ISO standard in 2003 (ISO/IEC 23270:2003
- Information technology Programming languages
C#). ECMA had previously adopted equivalent specications as the 2nd edition of C#, in December 2002.
In June 2005, ECMA approved edition 3 of the C# specication, and updated ECMA-334. Additions included
partial classes, anonymous methods, nullable types, and
generics (somewhat similar to C++ templates).
In July 2005, ECMA submitted to ISO/IEC JTC 1, via
the latters Fast-Track process, the standards and related
TRs. This process usually takes 69 months.

Above is a class denition. Everything between the fol- The C# language denition and the CLI are standardized
lowing pair of braces describes Program.
under ISO and Ecma standards that provide reasonable
and non-discriminatory licensing protection from patent
static void Main(string[] args)
claims.
This declares the class member method where the program begins execution. The .NET runtime calls the Main
method. (Note: Main may also be called from elsewhere,
like any other method, e.g. from another method of Program.) The static keyword makes the method accessible without an instance of Program. Each console applications Main entry point must be declared static. Otherwise, the program would require an instance, but any
instance would require a program. To avoid that irresolvable circular dependency, C# compilers processing
console applications (like that above) report an error, if
there is no static Main method. The void keyword declares that Main has no return value.

Microsoft has agreed not to sue open source developers


for violating patents in non-prot projects for the part
of the framework that is covered by the OSP.[46] Microsoft has also agreed not to enforce patents relating
to Novell products against Novells paying customers[47]
with the exception of a list of products that do not explicitly mention C#, .NET or Novells implementation of
.NET (The Mono Project).[48] However, Novell maintains
that Mono does not infringe any Microsoft patents.[49]
Microsoft has also made a specic agreement not to enforce patent rights related to the Moonlight browser plugin, which depends on Mono, provided it is obtained
through Novell.[50]

Console.WriteLine(Hello, world!");
This line writes the output. Console is a static class in the
System namespace. It provides an interface to the standard input, output, and error streams for console applications. The program calls the Console method WriteLine,
which displays on the console a line with the argument,
the string Hello, world!".

9 Implementations
The reference C# compiler is Microsoft Visual C#, which
is open-source.[51]
Microsoft is leading the development of a new opensource C# compiler and set of tools, previously code-

7
named "Roslyn". The compiler, which is entirely written
in managed code (C#), has been opened up and functionality surfaced as APIs. It is thus enabling developers to
create refactoring and diagnostics tools.
Other C# compilers exist, often including an implementation of the Common Language Infrastructure and the
.NET class libraries up to .NET 2.0:
The Mono project provides an open-source C# compiler, a complete open-source implementation of the
Common Language Infrastructure including the required framework libraries as they appear in the
ECMA specication, and a nearly complete implementation of the Microsoft proprietary .NET class
libraries up to .NET 3.5. As of Mono 2.6, no plans
exist to implement WPF; WF is planned for a later
release; and there are only partial implementations
of LINQ to SQL and WCF.[52]
The DotGNU project (now discontinued) also provided an open-source C# compiler, a nearly complete implementation of the Common Language Infrastructure including the required framework libraries as they appear in the ECMA specication,
and subset of some of the remaining Microsoft proprietary .NET class libraries up to .NET 2.0 (those
not documented or included in the ECMA specication, but included in Microsofts standard .NET
Framework distribution).
Microsofts Rotor project (currently called Shared
Source Common Language Infrastructure) (licensed
for educational and research use only) provides a
shared source implementation of the CLR runtime
and a C# compiler, and a subset of the required
Common Language Infrastructure framework libraries in the ECMA specication (up to C# 2.0,
and supported on Windows XP only).

10

See also

11

Notes

[1] for async


[2] By convention, a number sign is used for the second character in normal text; in artistic representations, sometimes
a true sharp sign is used: C.
[3] The Microsoft C# 2.0 specication document only contains the new 2.0 features. For older features use the 1.2
specication above.
[4] No ECMA or ISO/IEC specications exist for C# 3.0, 4.0
or 5.0.

12 References
[1] Torgersen, Mads (October 27, 2008). New features in
C# 4.0. Microsoft. Retrieved October 28, 2008.
[2] Naugler, David (May 2007). C# 2.0 for C++ and Java
programmer: conference workshop. Journal of Computing Sciences in Colleges. 22 (5). Although C# has been
strongly inuenced by Java it has also been strongly inuenced by C++ and is best viewed as a descendant of both
C++ and Java.
[3] Hamilton, Naomi (October 1, 2008). The A-Z of Programming Languages: C#". Computerworld. Retrieved
February 12, 2010. We all stand on the shoulders of giants here and every language builds on what went before it
so we owe a lot to C, C++, Java, Delphi, all of these other
things that came before us. (Anders Hejlsberg)
[4] Chapel spec (Acknowlegements)" (PDF). Cray Inc.
2015-10-01. Retrieved 2016-01-14.
[5] Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013. Google. Retrieved
22 December 2013.
[6] Java 5.0 added several new language features (the
enhanced for loop, autoboxing, varargs and annotations),
after they were introduced in the similar (and competing)
C# language
[7] Cornelius, Barry (December 1, 2005). Java 5 catches
up with C#". University of Oxford Computing Services.
Retrieved June 18, 2014. In my opinion, it is C# that has
caused these radical changes to the Java language. (Barry
Cornelius)
[8] Lattner, Chris (2014-06-03). Chris Lattners Homepage. Chris Lattner. Retrieved 2014-06-03. The Swift
language is the product of tireless eort from a team of
language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help rene and
battle-test ideas. Of course, it also greatly beneted from
the experiences hard-won by many other languages in
the eld, drawing ideas from Objective-C, Rust, Haskell,
Ruby, Python, C#, CLU, and far too many others to list.
[9] C# Language Specication (PDF) (4th ed.). Ecma International. June 2006. Retrieved January 26, 2012.
[10] Lander, Rich (20 July 2015). Top 10 C# 6.0 Language
Features. .NET Blog. Microsoft.
[11] Zander, Jason (November 24, 2008). Couple of Historical Facts. Retrieved February 23, 2009.
[12] Guthrie, Scott (November 28, 2006). What language
was ASP.Net originally written in?". Retrieved February
21, 2008.
[13] Hamilton, Naomi (October 1, 2008). The A-Z of Programming Languages: C#". Computerworld. Retrieved
October 1, 2008.
[14] Wylie Wong (2002). Why Microsofts C# isn't. CNET:
CBS Interactive. Retrieved May 28, 2014.

[15] Bill Joy (February 7, 2002). Microsofts blind spot.


cnet.com. Retrieved January 12, 2010.
[16] Klaus Kreft and Angelika Langer (2003). After Java and
C# - what is next?". Retrieved June 18, 2013.
[17] Klaus Kreft and Angelika Langer (July 3, 2003). After
Java and C# - what is next?". artima.com. Retrieved January 12, 2010.
[18] Osborn, John (August 1, 2000). Deep Inside C#: An
Interview with Microsoft Chief Architect Anders Hejlsberg. O'Reilly Media. Retrieved November 14, 2009
[19] Generics (C# Programming Guide)". Microsoft. Retrieved March 21, 2011.
[20] Don Box and Anders Hejlsberg (February 2007). LINQ:
.NET Language-Integrated Query. Microsoft. Retrieved
March 21, 2011.
[21] Mercer, Ian (April 15, 2010). Why functional programming and LINQ is often better than procedural code.
abodit.com. Retrieved March 21, 2011.
[22] Andy Retires. Dan Fernandezs Blog. Blogs.msdn.com.
January 29, 2004. Retrieved October 4, 2012.
[23] Technical committees - JTC 1/SC 22 - Programming
languages, their environments and system software interfaces. ISO. Retrieved October 4, 2012.
[24] ISO/IEC 23270:2003 - Information technology - C#
Language Specication. Iso.org. August 23, 2006. Retrieved October 4, 2012.
[25] ISO/IEC 23270:2006 - Information technology - Programming languages - C#". Iso.org. January 26, 2012.
Retrieved October 4, 2012.
[26] Kovacs, James (September 7, 2007). C#/.NET History
Lesson. Retrieved June 18, 2009.
[27] Hejlsberg, Anders (October 1, 2008). The A-Z of Programming Languages: C#". Computerworld.
[28] Microsoft C# FAQ. Microsoft. Retrieved March 25,
2008. Archived February 14, 2006, at the Wayback Machine.
[29] Visual C#.net Standard (JPEG). Microsoft. September
4, 2003. Retrieved June 18, 2009.
[30] F# FAQ. Microsoft Research. Retrieved June 18, 2009.
Archived February 18, 2009, at the Wayback Machine.
[31] Simon, Raphael; Stapf, Emmanuel; Meyer, Bertrand
(June 2002). Full Eiel on the .NET Framework.
Microsoft. Retrieved June 18, 2009.
[32] Using C# 3.0 from .NET 2.0. Danielmoth.com. May
13, 2007. Retrieved October 4, 2012.
[33] Mono and Roslyn. Tirania Blog. Miguel de Icaza. Retrieved 9 April 2014.Work in progress for C# 5.0.
[34] Whats new in the C# 2.0 Language and Compiler. Microsoft Developer Network. Microsoft. Retrieved 11 June
2014.

12

REFERENCES

[35] Hejlsberg, Anders; Torgersen, Mads. Overview of C#


3.0. Microsoft Developer Network. Microsoft. Retrieved
11 June 2014.
[36] Ghosh, Wriju. C# 3.0 : Partial * Garbage Collection
Methods. MSDN Blogs. Microsoft. Retrieved 11 June
2014. line feed character in |title= at position 18 (help)
[37] Burrows, Chris. C# 4.0 - New C# Features in the .NET
Framework 4. Microsoft Developer Network. Microsoft.
Retrieved 11 June 2014.
[38] Hejlsberg, Anders. Future directions for C# and Visual
Basic. C# lead architect. Microsoft. Retrieved September 21, 2011.
[39] An Introduction to New Features in C# 5.0. MSDN
Blogs. Microsoft. Retrieved 11 June 2014.
[40] Language feature implementation status. github. Microsoft. Retrieved 13 February 2015.
[41] Language Feature Status. GitHub. Retrieved 2016-0811.
[42] Visual Studio 2010 and .NET 4 Six-in-One. Wrox Press.
2010. ISBN 0470499486.
[43] Venners, Bill; Eckel, Bruce (August 18, 2003). The
Trouble with Checked Exceptions. Retrieved March 30,
2010.
[44] Archer, Tom (2001). Part 2, Chapter 4: The Type
System. Inside C#. Redmond, Washington: Microsoft
Press. ISBN 0-7356-1288-9.
[45] Lippert, Eric (March 19, 2009).
Representation
and Identity.
Fabulous Adventures In Coding.
Blogs.msdn.com. Retrieved October 4, 2012.
[46] Patent Pledge for Open Source Developers.
[47] Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration. Microsoft. November 2,
2006. Retrieved July 5, 2009. Microsoft, on behalf of itself and its Subsidiaries (collectively Microsoft), hereby
covenants not to sue Novells Customers and Novells
Subsidiaries Customers for infringement under Covered
Patents of Microsoft on account of such a Customers use
of specic copies of a Covered Product as distributed by
Novell or its Subsidiaries (collectively Novell) for which
Novell has received Revenue (directly or indirectly) for
such specic copies; provided the foregoing covenant is
limited to use by such Customer (i) of such specic copies
that are authorized by Novell in consideration for such
Revenue, and (ii) within the scope authorized by Novell
in consideration for such Revenue.
[48] Denitions. Microsoft. November 2, 2006. Retrieved
July 5, 2009.
[49] Steinman, Justin (November 7, 2006). Novell Answers
Questions from the Community. Retrieved July 5, 2009.
We maintain that Mono does not infringe any Microsoft
patents.

[50] Covenant to Downstream Recipients of Moonlight


- Microsoft & Novell Interoperability Collaboration.
Microsoft. September 28, 2007. Retrieved March 8,
2008. Downstream Recipient means an entity or individual that uses for its intended purpose a Moonlight Implementation obtained directly from Novell or through an
Intermediate Recipient... Microsoft reserves the right to
update (including discontinue) the foregoing covenant...
Moonlight Implementation means only those specic
portions of Moonlight 1.0 or Moonlight 1.1 that run only
as a plug-in to a browser on a Personal Computer and are
not licensed under GPLv3 or a Similar License.
[51] https://github.com/dotnet/roslyn
[52] Compatibility - Mono. Mono-project.com. December
19, 2011. Retrieved October 4, 2012.

13

Further reading

Drayton, Peter; Albahari, Ben; Neward, Ted (2002).


C# Language Pocket Reference. O'Reilly. ISBN 0596-00429-X.
Petzold, Charles (2002). Programming Microsoft
Windows with C#. Microsoft Press. ISBN 0-73561370-2.

14

External links

C# Language Specication (from MSDN)


C# Programming Guide (MSDN)
Microsoft Visual Studio
ISO C# Language Specication.
C# 6 Features And Online C# Compiler
C# Compiler Platform (Roslyn) source code
List of Key features introduced in #CSharp (1.0 to
6.0) - an Infographic

10

15

15
15.1

TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

Text and image sources, contributors, and licenses


Text

C Sharp (programming language) Source: https://en.wikipedia.org/wiki/C_Sharp_(programming_language)?oldid=740670791 Contributors: Damian Yerrick, Brion VIBBER, Bryan Derksen, Zundark, WillWare, Andre Engels, SimonP, Ewlloyd, Hannes Hirzel, FvdP,
Rcingham, Hirzel, Mrwojo, Frecklefoot, Edward, Michael Hardy, DopeshJustin, Fuzzie, Ixfd64, Gaurav, Minesweeper, Dmb~enwiki,
Ahoerstemeier, Ronz, Julesd, Cgs, Poor Yorick, Susurrus, Scott, Wael Ellithy, Sunbeam60, Astudent, Rl, Harvester, Alf, Benno~enwiki,
Timwi, Dcoetzee, Nohat, RickK, Dysprosia, Jay, Jogloran, Markhurd, Furrykef, Itai, Wernher, Samsara, Bevo, AnonMoos, Mrje, AnthonyQBachler, Hajor, Noblethrasher, Robbot, Craig Stuntz, Fredrik, Jotomicron, RedWolf, Chocolateboy, Altenmann, Psychonaut, Lowellian, Chris Roy, Samrolken, Rursus, KellyCoinGuy, Wikibot, Vikreykja, Robartin, Cyrius, Dmn, Tea2min, Mlk, David Gerard, Enochlau,
Ancheta Wis, Somercet, Dbenbenn, Marc Weil, Haeleth, Holizz, BenFrantzDale, var Arnfjr Bjarmason, Brian Kendig, Zigger, Herbee, Asilidae, Anville, Curps, CyborgTosser, Jgritz, Adrenalin~enwiki, Ajgorhoe, Sdsher, Joe Sewell, Alexander.stohr, Malekith~enwiki,
Gilgamesh~enwiki, JF Bastien, SheldonYoung, Mboverload, Proslaes, AlistairMcMillan, Brandalone, Matt Crypto, Pne, Tagishsimon,
Reilly, Neilc, Utcursch, Jonathan Grynspan, Regin LARSEN~enwiki, Noe, Ablewisuk, Rdsmith4, OwenBlacker, Maximaximax, Elroch,
Zfr, Two Bananas, Boojum, Kutulu, JulieADriver, Urhixidur, Int19h, Jh51681, GreenReaper, Abdull, Trevor MacInnis, Onebit, Moxfyre, Canterbury Tail, Zaf, Corti, Mike Rosoft, Vesta~enwiki, Mernen, Mormegil, Freakofnurture, Imroy, Slady, Jim Henry, RossPatterson, Discospinster, ElTyrant, Rich Farmbrough, Habbit, Hydrox, Nma wiki, Andros 1337, Wrp103, Mecanismo, Deh, ArnoldReinhold, Carlosliu, Abelson, Byrial, Bender235, Djordjes, Danakil, Nabla, Jtatum, Aranel, MisterSheik, CanisRufus, *drew, Anphanax,
Zenohockey, Kwamikagami, Thetuvix, Vortex~enwiki, Root4(one), Euyyn, Bendono, Whirl, Bobo192, Nigelj, Circeus, Army1987, John
Vandenberg, BrokenSegue, Unquietwiki, Phansen, Yonkie, Huan086, Jojit fb, Nk, Microtony, Flammifer, FredOrAlive, Cherlin, Larryv, JesseHogan, Alexmitchell, Jumbuck, Mick8882003, Tobych, Guy Harris, CyberSkull, Diego Moya, Yamla, Ahruman, Kinghajj,
Echuck215, Kel-nage, Sligocki, Vliam, Caesura, Ronark, Mr700, Suruena, Tony Sidaway, Sciurin, DamonCarr, Pauli133, Drbreznjev, Panchurret, Forderud, Mahanga, Dienstag, Joelpt, PdDemeter, Woohookitty, Mindmatrix, Georgia guy, Justinlebar, Nuggetboy, Percy
Snoodle, Tripodics, Bkkbrad, Ruud Koot, Hdante, Bluemoose, GregorB, Hayvac, Toussaint, PeterJohnson, Mekong Bluesman, Kesla,
MassGalactusUniversum, Yoghurt, Graham87, Ronnotel, BD2412, Yurik, DePiep, Ketiltrout, Rjwilmsi, War, PHenry, Wiarthurhu, Salix
alba, MZMcBride, Gudeldar, Bubba73, Yar Kramer, Mikm, Syced, FayssalF, FlaBot, Ysangkok, Nihiltres, Crazycomputers, Mathiastck,
DuLithgow, Lmatt, Jphofmann, Chobot, Elpaw, Visor, Billpg, YurikBot, Wavelength, Adrianob, Angus Lepper, Splintercellguy, Hairy
Dude, StuOfInterest, Cyberherbalist, Hyad, Arado, Muchness, Me and, Bhny, Richjkl, Pi Delport, Dnch, IByte, CanadianCaesar, Rodasmith, JohnJSal, Debackerl, Bovineone, TheMandarin, NawlinWiki, Miguel.de.Icaza, Dialectric, Thalter, ZacBowling, Futurix, Thiseye,
Alawi, PlusMinus~enwiki, Wuser10, EverettColdwell, Matthew0028, Bashmohandes, Froth, Leotohill, Foofy, Samir, BOT-Superzerocool,
Wangi, DeadEyeArrow, Jeremy Visser, Programous, Scope creep, Wtijsma, Werdna, Limetom, Eurosong, Rbirkby, Lt-wiki-bot, Closedmouth, GraemeL, Levil, CWenger, Talyian, JLaTondre, Dhavalhirdhav, Spooksh, Vahid83, Chip Zero, Mebden, Carlosguitar, Msgo,
GrinBot~enwiki, Dan Atkinson, Elliskev, AndrewWTaylor, Ankurdave, SmackBot, MattieTK, Incnis Mrsi, Tobias Schmidbauer, InverseHypercube, Razielim, Vald, Yuyudevil, Fikus, Fitch, Zeycus, Renku, Mscuthbert, Eaglizard, CGameProgrammer, InvertedSaint, Timotheus Canens, David Fuchs, Commander Keane bot, Unforgettableid, Sloman, Gilliam, Ohnoitsjamie, Hmains, Oscarthecat, Cabe6403,
Gorman, Gene Thomas, Cush, Exitmoose, Sirex98, Thumperward, Jdh30, Adamralph, Krous~enwiki, Akanemoto, Nbarth, Aclwon,
DHN-bot~enwiki, MovGP0, Sbharris, Torzsmokus, Krallja, Fluggo~enwiki, Darth Panda, Tbm5982, Mrtrumbe, Doc0tis, Edene, Onorem,
Nixeagle, OSborn, Themeparkphoto, -Barry-, UU, Amazon10x, Cybercobra, Irish Soue, Trifon Triantallidis, alyosha, Dream out
loud, A.R., Warren, Henning Makholm, WhosAsking, Rspanton, Viking880, Acdx, Riurik, Nmnogueira, SashatoBot, Doug Bell, Derek
farn, Shirifan, Gobonobo, Disavian, Strainu, Soumyasch, JorisvS, Sundstrm, Minna Sora no Shita, IronGargoyle, IharBury, BlindWanderer, Loadmaster, Dave104, Yms, Xiphoris, Catphive, Wikidrone, PeterRitchie, Vonvon, Whomp, Jpbisguier, Kyellan, Inquisitus,
Super3boy~enwiki, Hu12, Stenaught, Chunawalla, Artejera, Talandor, Tawkerbot2, Dlohcierekim, EvilRobot69, Amniarix, FatalError,
Lnatan25, Dirty leo, Egeskov, JForget, FleetCommand, CRGreathouse, Amalas, Dycedarg, JRavn, Enselic, Mycplus, Grr, CuriousEric,
NickW557, Napi, Simeon, JamesNK, InnerLight, Cydebot, MC10, Mato, Gogo Dodo, Betenner, Mrstonky, OmerMor, Rhe br, Torc2,
Eneville, Wizard 01, TheMuuj, Hafthor, Omicronpersei8, Voronkov, Room101, Rocket000, Merutak, Thijs!bot, Gaijin42, Pajz, Calvinballing, Hervegirod, Rossmann, AlexanderM, RickinBaltimore, Mu11etBoy, Jsnover, Dugwiki, XTZGZoReX, Trlkly, DanSoper, EdJogg, SoftwareDeveloper, Hires an editor, Gioto, Seaphoto, Hexene, DennisWithem, Drake Wilson, Kprobst, Raylopez99, JAnDbot,
NBeale, Husond, MER-C, ElementoX~enwiki, QuantumEngineer, PhilKnight, DanPMK, Kerotan, Goldenglove, LittleOldMe, Yunipo,
VoABot II, Fuchsias, Rhwawn, UweHaupt~enwiki, Mike Payne, Pkrecker, Spellmaster, Maju wiki, Gwern, Oren0, HotXRock, 23e23e,
Mjworthey, Rettetast, Ravichandar84, Andreas Mueller, Keith D, Dcwills, Gemuetlich, Yessopie, Coder1024, RockMFR, J.delanoy,
Pharaoh of the Wizards, Zwmalone, PC78, BabaYama, Vanished user vnsihoiewriu45iojsi3, Christopher G Lewis, DarkFalls, Joniki, McSly, Michaelabril, DotnetCarpenter, RenniePet, Daniel5Ko, Mfb52, NewEnglandYankee, DJTekken, KylieTastic, Juliancolton, Hc5duke,
Channard, Bonadea, Jmcentire, WinterSpw, Kemall, Useight, Intentional, Wikieditor06, VolkovBot, Kyledmorgan, The Wild Falcon,
Mrh30, Nahush.dani, Je G., AlnoktaBOT, JustinHagstrom, Tburket, Maghnus, Lingwitt, TXiKiBoT, Zeroag, Comrade Graham, Xerxesnine, Win32Coder, Rei-bot, Potatoj316, Anonymous Dissident, Lukejea, Broadbot, Abdullais4u, Ziounclesi, Daverose 33, PDFbot,
Smithberry, Wtt, MichaelShoemaker, Billinghurst, BankingBum, Sandip.khakhar, Mormat, AlleborgoBot, EmxBot, Rob1n, S.rvarr.S,
Wjl2, SieBot, Gorpik, BotMultichill, Bachcell, Winchelsea, Yintan, Mothmolevna, Noahcoad, Jerryobject, PookeyMaster, Flyer22 Reborn, Timgurto, Allmightyduck, Aly89, ObserverToSee, Steveharoz, Moletrouser, Svick, AlanUS, Enfenion, Tesi1700, Superbatsh,
Markcrosbie, ChessKnught, Ledpup, Nacarlson, Martarius, ClueBot, Coldpeer, Artichoker, Helpsloose, Fyyer, The Thing That Should
Not Be, ElectricCube, Compynerd255, DragonBot, Mumiemonstret, TMV943, Jusdafax, Goodone121, Northernhenge, Emperordarius,
Monobi, Sun Creator, TobiasPersson, Jin76, Yes-minister, Jmichael ll, Sealican, Aitias, Onstar, Ronklein~enwiki, Johnuniq, DumZiBoT,
Darkicebot, AzraelUK, XLinkBot, BodhisattvaBot, Rror, Mitch Ames, Kotakkasut, Srujantheboss, SilvonenBot, Addbot, Raghavkvp,
Mortense, Ghettoblaster, CSharpProMaster, Landon1980, Captain-tucker, Btx40, Quasiphoton, Scientus, MrOllie, Download, Renaissance77, CarsracBot, ZealousCoder, 3HackBug77, Gail, Ricvelozo, Jarble, Ben Ben, Legobot, Yobot, Themfromspace, Kartano, Ptbotgourou, Vanished user rt41as76lk, Tiburondude, SplinterOfChaos, TestEditBot, AnomieBOT, Rubinbot, Jim1138, Wickorama, Piano non
troppo, Ashok modhvadia, Ipatrol, Jimmy541, MehrdadAfshari, Sonickidnextgen, Jrobinjapan, Materialscientist, CasperBraske, Citation
bot, Abbasigee007, Georgepowell2008, The Asian Guy, Xqbot, TinucherianBot II, Thoolihan, Nasnema, Dolst, Mvalero, CSharp Student, TechEditor2010, Nasa-verve, Emcpadden, Dunc0029, AnyPerson, Tabledhote, Niitloveguru, NoldorinElf, Gastonhillar, FrescoBot,
CSharpUniversity, Mitchell52541, OnionBulb, Sae1962, Outback the koala, Machine Elf 1735, Shubalubdub, Genesispc, Mpynnone,
,
Antilus~enwiki, Intelligentsium, NiruLaksh, Spidey104, Skoobiedu, Dr.shaikhfarooque, Rumplestilzken, Ioakar, RedBot, Roboo.jack, ,
MeUser42, Mrzeinali, Roboblob, Jujutacular, Mikrosam Akademija 8, Ehasis, Dac04,
, Efexd123, Efexd1234, Tim1357, Philipdaubmeier, 7654321chris, Dinamik-bot, Vrenator, VibroAxe, Armageddon11, Richardjdavies, Reaper Eternal, Mttcmbs, Genhuan, Van-

15.2

Images

11

ishedUser sdu9aya9fs787232, Tbhotch, Reach Out to the Truth, Christoph hausner, Onel5969, Lyoko2198, Sputtnikk11, TjBot, Wornsear,
Rampea, EmausBot, Rikivillalba, Dewritech, GoingBatty, Minimacs Clone, Wikipelli, Dcirovic, Bleakgady, AsceticRose, Ivostefanov,
Regression Tester, Kkm010, ZroBot, Bollyje, DustinForever, MrGerjo, CavalcadeOfWhimsy, H3llBot, Iriseufall, SporkBot, Makecat,
Elsheimy, Kweckzilber, Tolly4bolly, Rcsprinter123, MochaFlux, IGProgram, Ramya20, Cgillhoolley, Mister Mormon, Matthewdunsdon,
DASHBotAV, 28bot, Baseballonline12, Phyll Chloro, Cgt, Rtoal, ClueBot NG, SpikeTorontoRCP, Sgreeve, Matthiaspaul, Theadamgaskinss, PorridgeBambo, BlackTigerX, Muon, Gagan746, Masssly, Aaron.eshbach, Cj005257-public, Sheldonleecooper, MerlIwBot, Fredlopez, Sijovijayan, Helpful Pixie Bot, SteveLalancette, Satyaprakashmehta, Titodutta, BG19bot, Tiksn, Ewascent, Reusablesnail, Wiki13,
Elijah.B, Mirhagk, Devkoy, Boshomi, AbyCodes, Afree10, Danile42, Ecallow, Loriendrew, Ashleyjm, BattyBot, Bakkedal, PathogenDavid, Mcbkruse, StarryGrandma, 1234gogogo, Cyberbot II, Timothy Gu, ChrisGualtieri, Ekren, Abstractematics, TheBlazeCoder, Rezonansowy, Randomizer3, Majilis, RapIsDead, Thirupkt, G, Swetha Glitz, Ebookoine, Librazy, Numbermaniac, Yejianfei, Sachinatole, Frosty, Graphium, Chukxx, Pokajanje, Wywin, Xueyingyu, Reatlas, Binamonk, Javierdcarrillo, Quaydon, Voddan, Comp.arch,
, Melody Lavender, Werddemer, Tchanders, Softzen, OccultZone, NadavAsh, JaconaFrere, Baalan92, Theeditornational, Monkbot,
Yantime, Da phenom, Ryan117100, CandyJugz, Helarious101, RationalBlasphemist, Fleivium, Wagnerp16, DSchiavini, I8086, Pleasechooseanotherusername, STJMLCC, Bccfalna, Sizeont, Surblove, JSG6155,
, KasparBot, Charliebonneau, Srednuas Lenoroc,
Rrobotto, DaniyalMughal, Mshumail11, Pppery, BrandonJackTar, Ishachopra1, J6allen77, GrovesNL and Anonymous: 1213

15.2

Images

File:8bit-dynamiclist_(reversed).gif Source: https://upload.wikimedia.org/wikipedia/commons/c/cc/8bit-dynamiclist_%28reversed%


29.gif License: CC-BY-SA-3.0 Contributors: This le was derived from: 8bit-dynamiclist.gif
Original artist: Seahen, User:Rezonansowy
File:C_Sharp_wordmark.svg Source: https://upload.wikimedia.org/wikipedia/commons/0/0d/C_Sharp_wordmark.svg License: Public
domain Contributors: Original work: http://oreilly.com/csharp/index.html Original artist: Vector version: Allmightyduck
File:Folder_Hexagonal_Icon.svg Source: https://upload.wikimedia.org/wikipedia/en/4/48/Folder_Hexagonal_Icon.svg License: Cc-bysa-3.0 Contributors: ? Original artist: ?
File:Symbol_list_class.svg Source: https://upload.wikimedia.org/wikipedia/en/d/db/Symbol_list_class.svg License: Public domain Contributors: ? Original artist: ?
File:Symbol_neutral_vote.svg Source: https://upload.wikimedia.org/wikipedia/en/8/89/Symbol_neutral_vote.svg License: Public domain Contributors: ? Original artist: ?
File:Treblecsharp5.svg Source: https://upload.wikimedia.org/wikipedia/commons/c/c6/Treblecsharp5.svg License: CC0 Contributors:
Own work Original artist: Tchanders
File:Wikibooks-logo-en-noslogan.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan.
svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al.

15.3

Content license

Creative Commons Attribution-Share Alike 3.0

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy