Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

C-Sharp

aus Wikipedia, der freien Enzyklopädie
Der korrekte Titel dieses Artikels lautet „C#“. Diese Schreibweise ist in der Wikipedia aufgrundtechnischer Einschränkungen nicht möglich.
C#
Basisdaten
Paradigmen:multiparadigmatisch:strukturiert,imperativ,deklarativ,objektorientiert,ereignisorientiert,funktional,generisch,reflexiv,parallel
Erscheinungsjahr:2001
Designer:Anders Hejlsberg
Entwickler:Microsoft
Aktuelle Version13.0[1][2] (12. November 2024)
Typisierung:statisch,stark,explizit (optional:dynamisch,duck,implizit)
WichtigeImplementierungen:Visual C#, Mono
Standardisierungen:ECMA-334
Beeinflusst von:C++, C, Java, Delphi, Modula-3, , Eiffel, F#, Haskell, ICON, J#, Visual J++, Object Pascal, Rust, Meta Language, Visual Basic
Beeinflusste:Java,[3]Vala,,Swift,VB.NET
Betriebssystem:alle, für die eineCLI-Implementierung existiert (z. B. Microsofts.Net-Framework oder XamarinsMono)
https://docs.microsoft.com/de-de/dotnet/csharp/

C# (englischc sharp [siːˈʃɑːp]) ist einetypsichereobjektorientierteAllzweck-Programmiersprache. Architekt der Sprache warAnders Hejlsberg im Auftrag vonMicrosoft, zurzeit ist Mads Torgersen der Chef-Entwickler. Die Sprache ist an sichplattformunabhä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ü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.

Namensgebung

[Bearbeiten |Quelltext bearbeiten]

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.

Konzept

[Bearbeiten |Quelltext bearbeiten]

C# greift Konzepte der ProgrammiersprachenJava,C++,Haskell,C sowie vonDelphi auf. C# zählt zu denobjektorientierten Programmiersprachen und unterstützt sowohl die Entwicklung von sprachunabhängigen .NET-Komponenten als auchCOM-Komponenten für den Gebrauch mitWin32-Anwendungsprogrammen.

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.

Standardisierung

[Bearbeiten |Quelltext bearbeiten]

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.

Versionen

[Bearbeiten |Quelltext bearbeiten]
C#-Versionen
JahrVersionneu eingeführte Sprachelemente
.NETC#
2002.NET Framework 1.0C# 1.0
2003.NET Framework 1.1C# 1.2
2005.NET Framework 2.0C# 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.5C# 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.0C# 4.0

Dynamisches Binding
Benannte und optionale Argumente
GenerischeKo- und Kontravarianz
Embedded Interop-Datentypen („NoPIA“)

2012.NET Framework 4.5C# 5.0

Asynchrone Methoden
Caller-Info-Attribute

2015.NET Framework 4.6C# 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 3C# 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.0C# 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

2022.NET 6.0C# 10.0

Datensatzstrukturen[10]Parameterlose Strukturkonstruktoren
Globaleusing-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[11]
C# 11.0

Generische Attribute
Generische Mathematik
Schlüsselwort fürIntPtr undUIntPtr Datentypen
Zeilenumbrüche bei Stringinterpolation
Erweiterung bei Listenmustern
Datei-lokale Datentypen
Benötigte Member-Datenfelder
ref Felder inref struct-Datenstrukturen
Default-Werte instruct-Datenstrukturen
UTF-8 Codierte Strings mittelsu8-Suffix
Erweiterung desnameof-Operators
„Raw String Literale“

2023.NET 8.0[12]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[13]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)

Integrierte Entwicklungsumgebungen (IDEs)

[Bearbeiten |Quelltext bearbeiten]

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

Compiler

[Bearbeiten |Quelltext bearbeiten]

In der Regel übersetzen die C# Compiler nicht unmittelbar in die Maschinensprache, sondern in eine Zwischensprache.

Siehe auch:Common Intermediate Language und.NET Compiler Platform

Bei der Ausführung wird dann einevirtuelle Maschine gestartet, die den zweiten Teil des Übersetzungsprozesses in einem Just-In-Time Compiler erledigt.

Es existieren vierCompiler für C#:

Sprachelemente

[Bearbeiten |Quelltext bearbeiten]
Hauptartikel:Sprachelemente von C-Sharp

C#-Syntaxbeispiel für ein einfaches Kommandozeilen-Programm:

usingSystem;classProgram{staticvoidMain(string[]args){Console.WriteLine("Hallo Welt!");}}

Einfache MessageBox in C#

usingSystem;usingSystem.Windows.Forms;classProgram{publicstaticvoidMain(){MessageBox.Show("Text","Titel",MessageBoxButtons.OK,MessageBoxIcon.Hand);}}

FileStream-Beispiel in C#

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}}}

Sprachderivate

[Bearbeiten |Quelltext bearbeiten]

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Literatur

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]
Wikibooks: Arbeiten mit .NET: C# – Lern- und Lehrmaterialien

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. devblogs.microsoft.com.
  2. learn.microsoft.com.
  3. Barry Cornelius: Java 5 catches up with C#. Abgerufen am 30. Mai 2022 (englisch). 
  4. 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. 
  5. Archivierte Kopie (Memento vom 2. Dezember 2012 imInternet Archive)
  6. Publicly Available Standards. Abgerufen am 30. Mai 2022. 
  7. 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 
  8. 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 
  9. 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). 
  10. BillWagner: C#-Dokumentation: Einstieg, Tutorials, Referenz. Abgerufen am 3. Juni 2022 (deutsch). 
  11. What's new in C# 11. Microsoft, abgerufen am 16. Dezember 2022 (englisch). 
  12. BillWagner: Neuigkeiten in C# 13. 27. November 2023, abgerufen am 11. Januar 2024 (deutsch). 
  13. BillWagner: What's new in C# 13. 20. Dezember 2024, abgerufen am 15. Januar 2025 (amerikanisches Englisch). 
  14. The .NET Compiler Platform. .NET Platform, 30. Mai 2022, abgerufen am 30. Mai 2022. 
  15. C# Compiler | Mono. Abgerufen am 17. Mai 2021. 
Normdaten (Sachbegriff):GND:4616843-6 (GND Explorer,lobid,OGND,AKS)
Abgerufen von „https://de.wikipedia.org/w/index.php?title=C-Sharp&oldid=254787808
Kategorien:
Versteckte Kategorien:

[8]ページ先頭

©2009-2025 Movatter.jp