Historisch wurde in C# fast exklusiv fürWindows entwickelt. DurchXamarin ist es inzwischen aber auch möglich, fürmacOS,iOS undAndroid zu entwickeln. Zudem gibt es mit.NET Core auch offizielle Unterstützung fürGNU/Linux und macOS.[4]
Bis Version 2 war die Sprache bei derECMA[5] und derISO[6] als Standard registriert.In der Folge erschienen regelmäßig umfangreiche Erweiterungen der Sprache durch Microsoft. Durch die Entwicklung des Referenz-Compilers alsOpen Source (seit 2014) sind auch Community-Beiträge möglich.
C# wurde unter dem CodenamenCool entwickelt, der jedoch aus Gründen desMarketings zur Veröffentlichung geändert wurde. Der NameC Sharp geht auf musikalische Notenschrift zurück, wo dasKreuz (♯, englischsharp) die Erhöhung von Stammtönen (in diesem Fall C) um einen Halbton kennzeichnet.[7]C sharp ist also derenglische Begriff für den Toncis. Dies ist eine Anspielung darauf, dass der Name der ProgrammierspracheC++ der Notation für dieErhöhung des Werts einer Variable um eins entstammt. Des Weiteren kann man das Kreuz-Zeichen als Kombination von vier Plus-Zeichen betrachten, was eine Erhöhung von C++ darstellen soll.[8] Allerdings enthält der Name nicht das Kreuz-Zeichen der Musiknotation, sondern einRautezeichen,[9] das häufig als Ersatzzeichen für das auf üblichen Tastaturen fehlende musikalische Symbol genutzt wird.
Einige der Elemente von C++, die im Allgemeinen als unsicher gelten, wie beispielsweiseZeiger, werden in C# nur für sogenannten „unsicheren Code“ erlaubt, der in Zonen mit eingeschränktenRechten (z. B. bei Programmen, die ausWebseiten heraus ausgeführt werden) ohne die Zuteilung erweiterter Rechte nicht ausgeführt wird.
Als .NET-Sprache verfügt auch C# über Sprachunterstützung fürAttribute undDelegaten.Attribute erlauben es, Informationen über eineKlasse, einObjekt, oder eineMethode zu speichern, die zurLaufzeit ausgewertet werden können. Man spricht hierbei auch vonMetadaten. EinDelegat kann auf Methoden einer Klasse verweisen. Das Konzept stellt eine Weiterentwicklung vonFunktionszeigern dar, wie sie beispielsweise in der Programmiersprache C vorkommen. Der Delegat hat jedoch einen festen Typ (genannt Delegat-Typ), der eine konkrete Signatur festlegt, die vom Compiler überprüft wird. Für den Aufruf beinhaltet der Delegat auch den Verweis auf das zu den Methoden gehörende Objekt. Ein Aufruf eines Delegaten ruft also gezielt eine Methode auf, der implizit ein Objektzeiger alsParameter übergeben wird. Außerdem müssen Delegatentypensicherdeklariert werden, was zur Folge hat, dassInkompatibilitäten derMethodensignaturen zwischen aufrufendem Delegat und der aufzurufenden Methode schon während derKompilierung bemerkt werden.
Ab der Version 2.0 von C#, die mit.Net-Framework 2.0 freigegeben wurde, unterstützt C# nebengenerischen Typen (englischgenerics) auchanonyme Methoden,Generatoren undpartielle Klassen. Generische Typen, Iteratoren und partielle Klassen sind Bestandteil des .NET-Frameworks 2.0 und stehen somit auch anderen .NET-Programmiersprachen wie beispielsweiseVisual Basic .NET zur Verfügung.
Microsoft reichte C# im August 2000 zusammen mitHewlett-Packard undIntel bei der NormungsorganisationEcma International zur Normung ein. Im Dezember 2001 veröffentlichte die ECMA die Norm ECMA-334C# Language Specification. 2003 wurde C# von derISO genormt (ISO/IEC 23270).
Im Juni 2005 genehmigte die ECMA die dritte Version (C# 2.0) der C#-Spezifikationen und aktualisierte die bisherige Norm ECMA-334. Hinzu kamen die partiellen Klassen, anonyme Methoden,nullable types und Generics, die Ähnlichkeiten zu denC++-Templates aufweisen. Im Juli 2005 übergab die ECMA die Standards und zugehörigen TRs an die ISO/IEC JTC 1.
Die ECMA-Spezifikation 334 deckt nur die Sprache C# ab. Programme, die in C# geschrieben werden, nutzen gewöhnlich das .NET-Framework, das teilweise durch andere Spezifikationen beschrieben wird und teilweiseproprietär ist. Dennoch ist die Sprache C# prinzipiellplattformunabhängig. Das von Ximian (jetztXamarin) initiierteProjekt Mono ermöglicht beispielsweise auch Nutzern vonmacOS oderUnix, C# für Entwicklungen auf ihrem Betriebssystem einzusetzen.
Microsoft veröffentlichte die dritte Version von C# mit dem .NET-SDK 2.0 undVisual Studio 2005 im November 2005.
Microsoft stellte klar, dass C#, genauso wie andere .NET-Sprachen, einen wichtigen Bestandteil seiner Softwarestrategie sowohl für den internen als auch für den externen Gebrauch darstelle. Das Unternehmen übernimmt eine aktive Rolle in der Vermarktung der Sprache als Teil seiner gesamten Geschäftsstrategie.
Dynamisches Binding Benannte und optionale Argumente GenerischeKo- und Kontravarianz Embedded Interop-Datentypen („NoPIA“)
2012
.NET Framework 4.5
C# 5.0
Asynchrone Methoden Caller-Info-Attribute
2015
.NET Framework 4.6
C# 6.0
Initialisierer für Auto-Properties Import statischer Funktionen in den Namespace Exception Filters Indizierte Membervariablen und Elementinitialisierer Das Keywordawait intry-catch-finally Blocks Collection-Initialisierer verwenden Add()-Erweiterungsmethode String-Interpolation Mehrzeilige String-Ausdrücke Null-Conditional Operator nameof-Ausdruck Implementierung von Methoden mittels Lambda-Ausdruck
2017
.NET Framework 4.6.2 .NET Core
C# 7.0– C# 7.3
Deklarationsausdrücke auf out-Parametern Mustervergleiche (Pattern matching) is-Ausdrücke mit Mustern switch-Anweisungen mit Typ-Mustern und zusätzlichen Bedingungen Tupel Dekonstruktion von Tupeln Lokal deklarierte Funktionen Füllzeichen_ zur Verbesserung der Lesbarkeit von Zahlen Binärliterale0b... Referenzen (Verweise) als Rückgabewert von Funktionen und als lokale Variablen Verallgemeinerte async-Rückgabe-Typen
Die Main-Methode kann async sein Lambdaausdrücke=> in Konstruktoren, Accessoren(get,set) und Finalizern Ausnahmen innerhalb von Ausdrücken erzeugen Bedingteref-Ausdrücke
2019
.NET Core 3
C# 8.0
Standardimplementierungen in Schnittstellen Switch Expressions Index- und Range-Operatoren zur Adressierung von Teilmengen asynchrone Streams (asynchrone Iteration mit foreach) nullbare Referenztypen (z. B.String?) statische Lokale Funktionen
2020
.NET 5.0
C# 9.0
Datensatztypen (Records) Eigenschafteninitialisierung Anweisungen außerhalb von Klassen Verbesserungen beim Pattern Matching Ganzzahlen mit nativer Größe Funktionszeiger Unterdrücke die Emission der lokalen Flags Zieltypisiertenew-Ausdrücke statische anonyme Funktionen Zieltypisierte bedingte Ausdrücke Kovariante Rückgabetypen ErweiterungsunterstützungGetEnumeratorfürforeachSchleifen Lambda-Verwerfungsparameter Attribute für lokale Funktionen Modulinitialisierer Neue Funktionen für Teilmethoden
Primäre Konstruktoren Sammlungsausdrücke Inlinearrays Optionale Parameter in Lambdaausdrücken ref readonly-Parameter Alias für beliebigen Typ Experimentelles Attribut Interceptors (Preview-Funktion)
Neue Escape-Sequenz \e für das Escape-Zeichen Partielle Properties und partielle Indexer Generische Mengen in Verbindung mit dem Schlüsselwort params Indizierung vom Ende her mit ^ Erweiterte Verwendungsmöglichkeiten für ref struct Prioritäten bei der Auflösung von Überladungen Field (Preview-Funktion)
Notepad++ (Windows; FLOSS) mit dem PluginCS-Script (FLOSS) ermöglichtAutovervollständigung, Codeausführung und Debugging
dasOmniSharp-Projekt ermöglicht, erleichtert und erweitert die Möglichkeiten verschiedener verbreiteter Editoren (Atom,Adobe Brackets,Emacs,Sublime Text,Vim und Visual Studio Code) bezüglich C# (als Teil von .NET)
mcs vonXamarin fürMono (Windows,macOS,GNU/Linux; FLOSS) unterstützte bis C# Version 6 alle Features, die Version 7 wurde nur noch partiell unterstützt[15]
DotGNU (FLOSS), Weiterentwicklung wurde 2012 eingestellt.
usingSystem;usingSystem.IO;usingSystem.Text;classProgram{publicstaticvoidMain(){// Text, der in die Datei geschrieben wirdconststringtextToWrite="Hallo Welt";conststringfileName="dateiname.txt";// Datei "dateiname.txt" wird erstellt oder überschriebenusing(varstream=newFileStream(fileName,FileMode.Create,FileAccess.Write)){// Der Text wird UTF8-kodiert in die Datei geschriebenvardata=Encoding.UTF8.GetBytes(textToWrite);stream.Write(data,0,data.Length);// Datei wird geschlossen...}}}
Networking-Beispiel in C#
usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;usingstaticSystem.Console;classProgram{publicstaticvoidMain(){// Daten, die gesendet werdenconststringtextToSend="Hallo Welt";// Endpunkt, zu dem verbunden wirdconststringlocalhost="127.0.0.1";constintport=80;vardata=Encoding.UTF8.GetBytes(textToSend);varip=IPAddress.Parse(localhost);varipEndPoint=newIPEndPoint(ip,port);// Socket, das verwendet wirdusing(varsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){// Es wird zum Endpunkt verbundensocket.Connect(ipEndPoint);// Daten werden gesendetvarbyteCount=socket.Send(data,SocketFlags.None);WriteLine("Es wurden {0} bytes gesendet",byteCount);// Puffer für die zu empfangenen Datenvarbuffer=newbyte[256];// Daten werden empfangenbyteCount=socket.Receive(buffer,SocketFlags.None);// Wenn eine Antwort erhalten wurde, diese ausgebenif(byteCount>0){WriteLine("Es wurden {0} Bytes empfangen",byteCount);varanswer=Encoding.UTF8.GetString(buffer);WriteLine("Empfangene Daten: {0}",answer);}// Verbindung wird geschlossen}}}
Joseph Albahari; Ben Albahari:C# 8.0 Pocket Reference: Instant Help for C# 8.0 Programmers. O’Reilly, Sebastopol 2019,ISBN 978-1-4920-5120-6 (englisch, 240 S.,Inhaltstext).
Matthias Geirhos:Professionell entwickeln mit C# 6 und Visual Studio 2015. Das Praxisbuch. 3., aktualisierte und erweiterte Auflage. Rheinwerk, Bonn 2016,ISBN 978-3-8362-3929-5 (1209 S.,Inhaltsverzeichnis,Inhaltstext).
↑Bis hier her siehe: Joseph Albahari; Ben Albahari:C# 6.0 in a Nutshell. The Definitive Reference. 6. Auflage. O’Reilly, Sebastopol 2016,ISBN 978-1-4919-2706-9,S.1–6. Joseph Albahari; Ben Albahari:C# 6.0 Pocket Reference Instant Help for C# 6.0 Programmers. O’Reilly, Sebastopol 2015,ISBN 978-1-4919-2741-0,S.1.
↑James Kovacs: C#/.NET History Lesson. 7. September 2007, archiviert vom Original (nicht mehr online verfügbar) am 6. März 2009; abgerufen am 25. März 2015 (englisch).Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/jameskovacs.com
↑Naomi Hamilton: The A-Z of Programming Languages: C#. Interview mit Anders Hejlsberg. 1. Oktober 2008, archiviert vom Original (nicht mehr online verfügbar) am 18. März 2015; abgerufen am 23. März 2015 (englisch).Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.computerworld.com.au
↑Standard ECMA-334 „C# Language Specification“. (PDF; 5,60 MB) Kapitel 6 „Acronyms and abbreviations“. Ecma International, Juni 2006, archiviert vom Original (nicht mehr online verfügbar) am 2. Dezember 2012; abgerufen am 23. März 2015 (englisch).