Zum Inhalt springen

C-Sharp

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 16. Februar 2026 um 19:00 Uhr durch imported>Eriosw (Namensgebung: Archivlink geprüft).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Vorlage:Hinweisbaustein

C#
colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | Datei:C Sharp Logo 2023.svg
Basisdaten
Paradigmen: multiparadigmatisch: strukturiert, imperativ, deklarativ, objektorientiert, ereignisorientiert, funktional, generisch, reflexiv, parallel
Erscheinungsjahr: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Designer: Anders Hejlsberg
Entwickler: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Aktuelle Version Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value))
Typisierung: statisch, stark, explizit (optional: dynamisch, duck, implizit)
Wichtige Implementierungen: Visual C#, Mono
Standardisierungen: ECMA-334
Beeinflusst von: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Beeinflusste: Java,<ref name="Java 5 catches up with CS">Barry Cornelius: Java 5 catches up with C#. Abgerufen am 30. Mai 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Vala, , Swift, VB.NET
Betriebssystem: alle, für die eine CLI-Implementierung existiert (z. B. Microsofts .Net-Framework oder Xamarins Mono)
Lizenz: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
https://docs.microsoft.com/de-de/dotnet/csharp/

C# (englisch c sharp [<templatestyles src="IPA/styles.css" />siːˈʃɑːp]) ist eine typsichere objektorientierte Allzweck-Programmiersprache. Architekt der Sprache war Anders Hejlsberg im Auftrag von Microsoft, zurzeit ist Mads Torgersen der Chef-Entwickler. Die Sprache ist an sich plattformunabhängig, wurde aber im Rahmen der .NET-Strategie entwickelt, ist auf diese optimiert und meist in deren Kontext zu finden.

Historisch wurde in C# fast exklusiv für Windows entwickelt. Durch Xamarin ist es inzwischen aber auch möglich, für macOS, iOS und Android zu entwickeln. Zudem gibt es mit .NET Core auch offizielle Unterstützung für GNU/Linux und macOS.<ref>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.</ref>

Bis Version 2 war die Sprache bei der ECMA<ref><templatestyles src="Webarchiv/styles.css" />Archivierte Kopie (Memento vom 2. Dezember 2012 im Internet Archive)</ref> und der ISO<ref>Publicly Available Standards. Abgerufen am 30. Mai 2022.</ref> als Standard registriert. In der Folge erschienen regelmäßig umfangreiche Erweiterungen der Sprache durch Microsoft. Durch die Entwicklung des Referenz-Compilers als Open Source (seit 2014) sind auch Community-Beiträge möglich.

Namensgebung

C# wurde unter dem Codenamen Cool entwickelt, der jedoch aus Gründen des Marketings zur Veröffentlichung geändert wurde. Der Name C Sharp geht auf musikalische Notenschrift zurück, wo das Kreuz (, englisch {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) die Erhöhung von Stammtönen (in diesem Fall C) um einen Halbton kennzeichnet.<ref>James Kovacs: C#/.NET History Lesson. 7. September 2007, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 6. März 2009; abgerufen am 25. März 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> C sharp ist also der englische Begriff für den Ton cis. Dies ist eine Anspielung darauf, dass der Name der Programmiersprache C++ der Notation für die Erhö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.<ref>Naomi Hamilton: The A-Z of Programming Languages: C#. Interview mit Anders Hejlsberg. 1. Oktober 2008, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 18. März 2015; abgerufen am 23. März 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Allerdings enthält der Name nicht das Kreuz-Zeichen der Musiknotation, sondern ein Rautezeichen,<ref>Standard ECMA-334 „C# Language Specification“. (PDF; 5,60 MB) Kapitel 6 „Acronyms and abbreviations“. Ecma International, Juni 2006, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 2. Dezember 2012; abgerufen am 23. März 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> das häufig als Ersatzzeichen für das auf üblichen Tastaturen fehlende musikalische Symbol genutzt wird.

Konzept

C# greift Konzepte der Programmiersprachen Java, C++, Haskell, C sowie von Delphi auf. C# zählt zu den objektorientierten Programmiersprachen und unterstützt sowohl die Entwicklung von sprachunabhängigen .NET-Komponenten als auch COM-Komponenten für den Gebrauch mit Win32-Anwendungsprogrammen.

Einige der Elemente von C++, die im Allgemeinen als unsicher gelten, wie beispielsweise Zeiger, werden in C# nur für sogenannten „unsicheren Code“ erlaubt, der in Zonen mit eingeschränkten Rechten (z. B. bei Programmen, die aus Webseiten heraus ausgeführt werden) ohne die Zuteilung erweiterter Rechte nicht ausgeführt wird.

Als .NET-Sprache verfügt auch C# über Sprachunterstützung für Attribute und Delegaten. Attribute erlauben es, Informationen über eine Klasse, ein Objekt, oder eine Methode zu speichern, die zur Laufzeit ausgewertet werden können. Man spricht hierbei auch von Metadaten. Ein Delegat kann auf Methoden einer Klasse verweisen. Das Konzept stellt eine Weiterentwicklung von Funktionszeigern 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 als Parameter übergeben wird. Außerdem müssen Delegaten typensicher deklariert werden, was zur Folge hat, dass Inkompatibilitäten der Methodensignaturen zwischen aufrufendem Delegat und der aufzurufenden Methode schon während der Kompilierung bemerkt werden.

Ab der Version 2.0 von C#, die mit .Net-Framework 2.0 freigegeben wurde, unterstützt C# neben generischen Typen (englisch generics) auch anonyme Methoden, Generatoren und partielle Klassen. Generische Typen, Iteratoren und partielle Klassen sind Bestandteil des .NET-Frameworks 2.0 und stehen somit auch anderen .NET-Programmiersprachen wie beispielsweise Visual Basic .NET zur Verfügung.

Standardisierung

Microsoft reichte C# im August 2000 zusammen mit Hewlett-Packard und Intel bei der Normungsorganisation Ecma International zur Normung ein. Im Dezember 2001 veröffentlichte die ECMA die Norm ECMA-334 C# Language Specification. 2003 wurde C# von der ISO 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 den C++-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 teilweise proprietär ist. Dennoch ist die Sprache C# prinzipiell plattformunabhängig. Das von Ximian (jetzt Xamarin) initiierte Projekt Mono ermöglicht beispielsweise auch Nutzern von macOS oder Unix, C# für Entwicklungen auf ihrem Betriebssystem einzusetzen.

Microsoft veröffentlichte die dritte Version von C# mit dem .NET-SDK 2.0 und Visual 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.

Versionen

C#-Versionen
Jahr Version neu eingeführte Sprachelemente
.NET C#
2002 .NET Framework 1.0 C# 1.0
2003 .NET Framework 1.1 C# 1.2
2005 .NET Framework 2.0 C# 2.0
  • Generics
  • Partielle Typen
  • Anonyme Methoden
  • Iteratoren
  • Nullable-Datentyp
  • Private setters
  • Delegates
  • Kovarianz und Kontravarianz
  • Statische Klassen
2006 .NET Framework 3.0
2007 .NET Framework 3.5 C# 3.0
  • Implizit typisierte Variablen
  • Objekt- und Collection-Initialisierer
  • Automatisch implementierte Properties
  • Anonyme Datentypen
  • Erweiterungsmethoden
  • LINQ
  • Lambda-Expressions
  • Expression-Trees
  • Partielle Methoden
2010 .NET Framework 4.0 C# 4.0
  • Dynamisches Binding
  • Benannte und optionale Argumente
  • Generische Ko- 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 Keyword await in try-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ärliterale 0b...
  • Referenzen (Verweise) als Rückgabewert von Funktionen und als lokale Variablen
  • Verallgemeinerte async-Rückgabe
  • Die Main-Methode kann async sein
  • Lambdaausdrücke => in Konstruktoren, Accessoren(get,set) und Finalizern
  • Ausnahmen innerhalb von Ausdrücken erzeugen
  • Bedingte ref-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
  • Zieltypisierte new-Ausdrücke
  • statische anonyme Funktionen
  • Zieltypisierte bedingte Ausdrücke
  • Kovariante Rückgabetypen
  • Erweiterungsunterstützung GetEnumeratorfür foreachSchleifen
  • Lambda-Verwerfungsparameter
  • Attribute für lokale Funktionen
  • Modulinitialisierer
  • Neue Funktionen für Teilmethoden
2022 .NET 6.0 C# 10.0
  • Datensatzstrukturen<ref>BillWagner: C#-Dokumentation: Einstieg, Tutorials, Referenz. Abgerufen am 3. Juni 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>
  • Parameterlose Strukturkonstruktoren
  • Globale using-Anweisung
  • Dateibereichsnamespaces
  • Muster für erweiterte Eigenschaften
  • Verbesserte interpolierte Zeichenfolgen
  • Konstante interpolierte Zeichenfolgen
  • Lambdaverbesserungen
  • Aufruferargumentausdruck
  • Erweiterte #line-Direktiven
  • Generische Attribute
  • Verbesserte Analyse der definitiven Zuweisung
  • AsyncMethodBuilder-Überschreibung
2022 .NET 7.0<ref name="wncs11">What's new in C# 11. Microsoft, abgerufen am 16. Dezember 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> C# 11.0
  • Generische Attribute
  • Generische Mathematik
  • Schlüsselwort für IntPtr und UIntPtr Datentypen
  • Zeilenumbrüche bei Stringinterpolation
  • Erweiterung bei Listenmustern
  • Datei-lokale Datentypen
  • Benötigte Member-Datenfelder
  • ref Felder in ref struct-Datenstrukturen
  • Default-Werte in struct-Datenstrukturen
  • UTF-8 Codierte Strings mittels u8-Suffix
  • Erweiterung des nameof-Operators
  • „Raw String Literale“
2023 .NET 8.0<ref>BillWagner: Neuigkeiten in C# 13. 27. November 2023, abgerufen am 11. Januar 2024 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> C# 12.0
  • Primäre Konstruktoren
  • Sammlungsausdrücke
  • Inlinearrays
  • Optionale Parameter in Lambdaausdrücken
  • ref readonly-Parameter
  • Alias für beliebigen Typ
  • Experimentelles Attribut
  • Interceptors (Preview-Funktion)
2024 .NET 9.0<ref>BillWagner: What's new in C# 13. 20. Dezember 2024, abgerufen am 15. Januar 2025 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> C# 13.0
  • 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)
2025 .NET 10.0<ref>BillWagner: What's new in C# 14. 19. April 2025, abgerufen am 10. September 2025 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> C# 14.0
  • Erweiterungsmitglieder
  • Neues Schlüsselwort field
  • Implizite Typumwandlungen für SPAN
  • Einfache Lambda-Parameter mit Modifikatoren
  • Nullbedingte Zuweisungen
  • Ungebundene generische Typen bei nameof
  • Partielle Instanzkonstruktoren und Ereignisdeklarationen

Integrierte Entwicklungsumgebungen (IDEs)

Die dominierende Entwicklungsplattform ist Microsoft Visual Studio (Windows und macOS, proprietäre Software). Es gibt auch eine Reihe anderer Entwicklungsumgebungen (IDEs) für C#, es werden jedoch nicht immer die neusten Sprachstandards und Laufzeitumgebungen (.NET Core) unterstützt:

Compiler

In der Regel übersetzen die C# Compiler nicht unmittelbar in die Maschinensprache, sondern in eine Zwischensprache. Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden. Bei der Ausführung wird dann eine virtuelle Maschine gestartet, die den zweiten Teil des Übersetzungsprozesses in einem Just-In-Time Compiler erledigt.

Es existieren vier Compiler für C#:

Sprachelemente

C#-Syntaxbeispiel für ein einfaches Kommandozeilen-Programm:<ref>BillWagner: Hello World - Einführungs-Lernprogramm - A tour of C#. Abgerufen am 4. Januar 2026 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

<syntaxhighlight lang="csharp"> Console.WriteLine("Hallo Welt!"); </syntaxhighlight>

Einfache MessageBox in C#

<syntaxhighlight lang="csharp"> using System; using System.Windows.Forms;

class Program {

   public static void Main()
   {
       MessageBox.Show("Text",
                       "Titel",
                       MessageBoxButtons.OK,
                       MessageBoxIcon.Hand);
   }

} </syntaxhighlight>

FileStream-Beispiel in C#

<syntaxhighlight lang="csharp"> using System; using System.IO; using System.Text;

class Program {

   public static void Main()
   {
       // Text, der in die Datei geschrieben wird
       const string textToWrite = "Hallo Welt";
       const string fileName = "dateiname.txt";
       // Datei "dateiname.txt" wird erstellt oder überschrieben
       using (var stream = new FileStream(fileName,
                                          FileMode.Create,
                                          FileAccess.Write))
       {
           // Der Text wird UTF8-kodiert in die Datei geschrieben
           var data = Encoding.UTF8.GetBytes(textToWrite);
           stream.Write(data, 0, data.Length);
           // Datei wird geschlossen...
       }
   }

} </syntaxhighlight>

Networking-Beispiel in C#

<syntaxhighlight lang="csharp"> using System.Text; using System.Net; using System.Net.Sockets; using static System.Console;

class Program {

   public static void Main()
   {
       // Daten, die gesendet werden
       const string textToSend = "Hallo Welt";
       // Endpunkt, zu dem verbunden wird
       const string localhost = "127.0.0.1";
       const int port = 80;
       var data = Encoding.UTF8.GetBytes(textToSend);
       var ip = IPAddress.Parse(localhost);
       var ipEndPoint = new IPEndPoint(ip, port);
       // Socket, das verwendet wird
       using (var socket = new Socket(AddressFamily.InterNetwork,
                                      SocketType.Stream,
                                      ProtocolType.Tcp))
       {
           // Es wird zum Endpunkt verbunden
           socket.Connect(ipEndPoint);
           // Daten werden gesendet
           var byteCount = socket.Send(data, SocketFlags.None);
           WriteLine("Es wurden {0} bytes gesendet", byteCount);
           // Puffer für die zu empfangenen Daten
           var buffer = new byte[256];
           // Daten werden empfangen
           byteCount = socket.Receive(buffer, SocketFlags.None);
           // Wenn eine Antwort erhalten wurde, diese ausgeben
           if (byteCount > 0)
           {
               WriteLine("Es wurden {0} Bytes empfangen", byteCount);
               var answer = Encoding.UTF8.GetString(buffer);
               WriteLine("Empfangene Daten: {0}", answer);
           }
           // Verbindung wird geschlossen
       }
   }

} </syntaxhighlight>

Sprachderivate

Siehe auch

Literatur

  • Walter Doberenz; Thomas Gewinnus: Visual C# 2015. Grundlagen, Profiwissen und Rezepte. Hanser, München 2015, ISBN 978-3-446-44381-5 (1195 S., Inhaltsverzeichnis, 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).
  • Andreas Kühnel: C# 8 mit Visual Studio 2019: das umfassende Handbuch. 8., aktualisierte Auflage. Rheinwerk, Bonn 2019, ISBN 978-3-8362-6458-7 (1478 S., Inhaltsverzeichnis, Inhaltstext).
  • Hanspeter Mössenböck: Kompaktkurs C# 7.0. dpunkt, Heidelberg 2018, ISBN 978-3-86490-631-2 (344 S., Inhaltsverzeichnis, Inhaltstext [PDF]).
  • Thomas Theis: Einstieg in C# mit Visual Studio 2015. Ideal für Programmieranfänger geeignet. 4., aktualisierte Auflage. Rheinwerk, Bonn 2015, ISBN 978-3-8362-3705-5 (553 S., Inhaltsverzeichnis, Inhaltstext).
  • Bernhard Wurm: Schrödinger programmiert C#. Das etwas andere Fachbuch. 3. Auflage. Rheinwerk, Bonn 2019, ISBN 978-3-8362-6968-1 (749 S., Inhaltsverzeichnis, Inhaltstext).

Weblinks

Einzelnachweise

<references />

Vorlage:Hinweisbaustein