C scharf (Programmiersprache)

C#
C Sharp wordmark.svg
Paradigma Multi-Paradigma: strukturiert, Imperativ, objektorientierter, ereignisgesteuert, aufgabenbetrieben, funktional, generisch, reflektierend, gleichzeitig
Familie C
Entworfen von Anders Hejlsberg (Microsoft)
Entwickler MADS TORGERSEN (Microsoft)
Erstmals erschienen 2000; Vor 22 Jahren[1]
Stabile Version
10.0[2] Edit this on Wikidata / 8. November 2021; vor 8 Monaten
Vorschau -Version
11[3] Edit this on Wikidata / 22. Februar 2022; vor 5 Monaten
Disziplin tippen Statisch, dynamisch,[4] stark, sicher, Nominativ, teilweise abgeleitet
Plattform Gemeinsame Sprachinfrastruktur
Lizenz
Dateiname -Erweiterungen .cs, .csx
Webseite Dokumente.Microsoft.com/en-us/Punkt net/csharp/
Haupt Implementierungen
Visuell c#, .NETZ, .NET Framework (abgesetzt), Mono, Dotgnu (eingestellt), Universelle Windows -Plattform
Dialekte
, Polyphonische C#, Verbessert C#
Beeinflusst von
C ++,[7] , Eiffel, F#,[a] Haskell, Symbol, J#, J ++, Java,[7] Ml, Modula-3, Objekt Pascal,[8] VB
Beeinflusst
Kapelle,[9] Clojure,[10] Kristall,[11] D, J#, Pfeil,[12] F#, Hacken, Java,[13][14] Kotlin, Nemerle, Oxygen, Rost, Schnell,[15] Vala, Typoskript
  • C scharfe Programmierung bei Wikibooks

C# (/si ʃːrp/ Siehe scharf)[b] ist ein Allzweck, Multi-Paradigm-Programmiersprache. C# umfasst statische Typisierung, Starke Typisierung, lexikalisch abgebildet, Imperativ, deklarativ, funktional, generisch, objektorientierter (Klasse-basierend) und Komponentenorientiert Programmierdisziplinen.[16]

Die C# -Programmiersprache wurde von entworfen von Anders Hejlsberg aus Microsoft im Jahr 2000 und wurde später als als genehmigt internationaler Standard durch ECMA (ECMA-334) im Jahr 2002 und ISO/IEC (ISO/IEC 23270) im Jahr 2003. Microsoft stellte C# zusammen mit .NET Framework und Visual Studiobeide waren geschlossene Source. Zu dieser Zeit hatte Microsoft keine Open-Source-Produkte. Vier Jahre später, im Jahr 2004, a frei und offen Projekt genannt Mono begann, eine Bereitstellung eines plattformübergreifend Compiler und Laufzeitumgebung Für die C# Programmiersprache. Ein Jahrzehnt später hat Microsoft veröffentlicht Visual Studio -Code (Code -Editor), Roslyn (Compiler) und die einheitliche .net -Plattform (Software-Framework), die alle C# unterstützen und frei, offen und plattformübergreifend sind. Mono kam auch zu Microsoft, wurde aber nicht zu .NET zusammengeführt.

Ab Juli 2022, Die neueste stabile Version der Sprache ist C# 10.0, die 2021 in .NET 6.0 veröffentlicht wurde.[17][18]

Designziele

Der ECMA -Standard listet diese Designziele für C#auf:[16]

Geschichte

Während der Entwicklung der .NET Framework, das Klassenbibliotheken wurden ursprünglich mit a geschrieben verwalteter Code Compiler -System genannt "Simple Managed C" (SMC).[20][21] Im Januar 1999, Anders Hejlsberg bildete ein Team, um zu dieser Zeit eine neue Sprache namens Cool zu bauen, für die stand "C-like Objektorientierte Sprache ".[22] Microsoft hatte darüber nachgedacht, den Namen "cool" als endgültigen Namen der Sprache zu halten, dies jedoch aus Markengründen nicht zu tun. Bis zum Zeitpunkt des .NET -Projekts im Juli 2000 öffentlich angekündigt wurde Professionelle Entwicklerkonferenz, Die Sprache war in C#und in den Klassenbibliotheken umbenannt worden und ASP.NET Die Laufzeit war auf C#portiert worden.

Hejlsberg ist der Hauptdesigner und leitender Architekt von C#bei Microsoft und war zuvor am Design von beteiligt Turbo Pascal, Embarcadero Delphi (ehemals Codehear Delphi, Inprise Delphi und Borland Delphi) und Visuell j ++. In Interviews und technischen Papieren hat er diese Fehler erklärt[23] In den meisten wichtigen Programmiersprachen (z. C ++, Java, Delphi, und Smalltalk) Die Grundlagen der Grundlagen der Gemeinsame Sprachlaufzeit (CLR), was wiederum das Design der C# -Sprache selbst fuhr.

James Gosling, wer schuf das Java Programmiersprache im Jahr 1994 und Bill Joyein Mitbegründer von Sun Microsystems, der Urheber von Java, C# eine "Nachahmung" von Java; Gosling sagte weiter, dass "[C#] eine Art Java mit Zuverlässigkeit, Produktivität und Sicherheitslöschung ist".[24][25] Klaus Kreft und Angelika Langer (Autoren eines C ++ - Streams -Buches) erklärten in einem Blog -Beitrag, dass "Java und C# fast identische Programmiersprachen sind. Langweilige Wiederholung, die keine Innovation hat"[26] "Kaum jemand wird behaupten, dass Java oder C# revolutionäre Programmiersprachen sind, die die Art und Weise, wie wir Programme schreiben Boxen Und das Unboxing werden wir in Java eine sehr ähnliche Funktion haben. "[27] Im Juli 2000 sagte Hejlsberg, C# sei "kein Java -Klon" und "C ++ viel näher" in seinem Design.[28]

Seit der Veröffentlichung von C# 2.0 im November 2005 haben sich die C #- und Java -Sprachen auf zunehmend unterschiedlichen Trajektorien entwickelt und sind zwei ganz unterschiedliche Sprachen. Eine der ersten großen Abflüsse kam mit der Hinzufügung von Generika zu beiden Sprachen mit sehr unterschiedlichen Implementierungen. C# benutzt von Verdinglichung "Erstklasse" generische Objekte bereitzustellen, die wie jede andere Klasse verwendet werden können, mit Codegenerierung bei der Klassenlastzeit durchgeführt.[29] Darüber hinaus hat C# mehrere wichtige Funktionen hinzugefügt, um die Programmierung im funktionalen Stil zu berücksichtigen, die in der Gipfeln in der Linq Verlängerungen mit C# 3.0 und seinem unterstützenden Rahmen von Lambda -Ausdrücke, Verlängerungsmethoden, und Anonyme Typen.[30] Diese Funktionen ermöglichen C# -Programmierern die Verwendung funktionaler Programmierechniken wie z. Schließungen, wenn es für ihre Anwendung vorteilhaft ist. Die LINQ -Erweiterungen und die funktionellen Importe helfen Entwicklern, die Menge an zu reduzieren Boilerplate -Code Dies ist in allgemeinen Aufgaben wie Abfrage einer Datenbank, der Parsen einer XML -Datei oder der Suche nach einer Datenstruktur enthalten, wodurch der Schwerpunkt auf die tatsächliche Programmlogik verschoben wird, um die Lesbarkeit und Wartbarkeit zu verbessern.[31]

C# hatte früher a Maskottchen nannte Andy (benannt nach Anders Hejlsberg). Es wurde am 29. Januar 2004 im Ruhestand gegangen.[32]

C# wurde ursprünglich dem ISO/IEC JTC 1 -Unterausschuss eingereicht SC 22 zur Durchsicht,[33] Unter ISO/IEC 23270: 2003,[34] wurde zurückgezogen und dann unter ISO/IEC 23270: 2006 zugelassen.[35] Der 23270: 2006 wird unter 23270: 2018 zurückgezogen und mit dieser Version genehmigt.[36]

Name

Microsoft verwendete erstmals 1988 den Namen C# für eine Variante der C -Sprache, die für die inkrementelle Kompilierung ausgelegt ist.[37] Dieses Projekt wurde nicht abgeschlossen, aber der Name lebt weiter.

Der Name "C Sharp" wurde von der musikalischen Notation inspiriert, bei der a scharfes Symbol Zeigt an, dass die schriftliche Notiz a gemacht werden sollte a Semiton höher in Tonhöhe.[38] Dies ähnelt dem Sprachnamen von C ++, wobei "++" angibt, dass eine Variable nach der Bewertung durch 1 erhöht werden sollte. Das scharfe Symbol ähnelt auch a Ligatur von vier "+" -Symbolen (in einem Zwei-mal-zwei-Raster), was dazu führt, dass die Sprache ein Inkrement von C ++ ist.[39]

Aufgrund technischer Einschränkungen der Anzeige (Standardschriften, Browser usw.) und der Tatsache, dass das scharfe Symbol ( U+266f Musik scharfes Zeichen (&Scharf;)) ist am meisten nicht vorhanden Tastaturlayouts, das Nummernschild ( U+0023 # NUMMERNSCHILD (& num;)) wurde ausgewählt, um das scharfe Symbol im geschriebenen Namen der Programmiersprache zu approximieren.[40] Diese Konvention spiegelt sich in der Sprachspezifikation von ECMA-334 C# wider.[16]

Das "scharfe" Suffix wurde von einer Reihe anderer .net -Sprachen verwendet, die Varianten vorhandener Sprachen sind, einschließlich J# (Eine .NET -Sprache, die auch von Microsoft entworfen wurde und von Java 1.1 abgeleitet ist), EIN# (aus Ada), und die Funktionelle Programmierung Sprache F#.[41] Die ursprüngliche Implementierung von Eiffel für .net wurde Eiffel#genannt,[42] Ein Name war seit dem vollständigen Ruhestand Eiffel Die Sprache wird jetzt unterstützt. Das Suffix wurde auch für verwendet Bibliotheken, wie zum Beispiel Gtk# (ein Netz Verpackung zum Gtk und andere Gnom Bibliotheken) und Kakao# (eine Wrapper für Kakao).

Versionen

Ausführung Sprachspezifikation Datum .NETZ Visual Studio
ECMA ISO/IEC Microsoft
C# 1.0 Dezember 2002 April 2003 Januar 2002 Januar 2002 .NET Framework 1.0 Visual Studio .net 2002
C# 1.1
C# 1.2
Oktober 2003 April 2003 Visual Studio .net 2003
C# 2.0[43] Juni 2006 September 2006 September 2005[c] November 2005 Visual Studio 2005
Visual Studio 2008
C# 3.0[44] Keiner August 2007 November 2007
Visual Studio 2008
C# 4.0[46] April 2010 April 2010 Visual Studio 2010
C# 5.0[47] Dezember 2017 Dezember 2018 Juni 2013 August 2012 Visual Studio 2012
Visual Studio 2013
C# 6.0[48] Keiner Entwurf Juli 2015
Visual Studio 2015
C# 7.0[49][50] Spezifikationsvorschlag März 2017 Visual Studio 2017 Version 15.0
C# 7.1[51] Spezifikationsvorschlag August 2017
  • .NET CORE 2.0
Visual Studio 2017 Version 15.3[52]
C# 7.2[53] Spezifikationsvorschlag November 2017 Visual Studio 2017 Version 15.5[54]
C# 7.3[55] Spezifikationsvorschlag Mai 2018
Visual Studio 2017 Version 15.7[54]
C# 8.0[56] Spezifikationsvorschlag September 2019
  • .NET CORE 3.0
  • .NET CORE 3.1
Visual Studio 2019 Version 16.3[57]
C# 9.0[58] Spezifikationsvorschlag November 2020
  • .Net 5.0
Visual Studio 2019 Version 16.8[57]
C# 10.0[59] Spezifikationsvorschlag November 2021
  • .Net 6.0
  • .Net 6.0.1
Visual Studio 2022 Version 17.0[60]

Syntax

Die Kernsyntax der C#-Sprache ähnelt der anderer Sprachen im C-Stil wie C, C ++ und Java, insbesondere:

Unterscheidungsmerkmale

Einige bemerkenswerte Merkmale von C#, die es von C, C ++ und Java unterscheiden, sind:

Portabilität

C# ist die Programmiersprache, die die zugrunde liegenden am direkten widerspiegelt Gemeinsame Sprachinfrastruktur(CLI).[61] Die meisten seiner intrinsischen Typen entsprechen den vom CLI-Framework implementierten Werttypen. In der Sprachspezifikation wird jedoch nicht die Anforderungen der Codegenerierung des Compiler angegeben: Das heißt nicht, dass ein C# Compiler auf eine gemeinsame Sprachlaufzeit abzielen oder generieren muss Gemeinsame Zwischensprache (CIL) oder ein anderes spezifisches Format erzeugen. Theoretisch kann ein C# Compiler Maschinencode wie herkömmliche Compiler von C ++ oder generieren Forran.

Typisierung

C# unterstützt stark, implizit getippte variable Erklärungen mit dem Schlüsselwort varund implizit Arrays mit dem Schlüsselwort implizit getippt Neu[] gefolgt von einem Sammelinitialisierer.

C# unterstützt einen strengen Boolean Datentyp, bool. Aussagen, die Bedingungen annehmen, z. während und wennerfordern einen Ausdruck eines Typs, der das implementiert Stimmt Bediener wie der Boolesche Typ. Während C ++ auch einen booleschen Typ hat, kann es frei zu und von Ganzzahlen und Ausdrücken wie z. wenn ein) nur das benötigen a ist umwandelbar zu bool, erlaubt a ein int sein oder ein Zeiger. C# macht diesen Ansatz "Ganzzahl bedeuten wahr oder falsch" und ist mit der Begründung, dass Programmierer dazu gezwungen werden, Ausdrücke zu verwenden, die genau zurückkehren bool kann bestimmte Arten von Programmierfehlern verhindern, z. if (a = b) (Verwendung der Zuordnung = anstelle von Gleichheit ==).

C# ist mehr Geben Sie sicher als C ++. Das einzige implizite Konvertierungen Standardmäßig gelten diejenigen, die als sicher angesehen werden, z. B. die Erweiterung der Ganzzahlen. Dies wird bei Compiles-Time während der Zeit erzwungen, während Jitund in einigen Fällen zur Laufzeit. Es treten weder zwischen Booleschen und Ganzzahlen oder zwischen Aufzählungsmitgliedern und Ganzzahlen (mit Ausnahme von Literal 0, die implizit in einen aufzähligen Typ umgewandelt werden können). Jede benutzerdefinierte Konvertierung muss im Gegensatz zu C ++ explizit als explizit oder implizit gekennzeichnet sein Konstruktoren kopieren und Conversion -Operatoren, die beide standardmäßig implizit sind.

C# hat explizite Unterstützung für Kovarianz und Kontravarianz Bei generischen Typen, im Gegensatz zu C ++, was ein gewisses Maß an Kontravarianz durch die Semantik von Rückgabetypen bei virtuellen Methoden bietet.

Aufzählung Mitglieder werden in ihren eigenen platziert Umfang.

Die C# -Sprache erlaubt keine globalen Variablen oder Funktionen. Alle Methoden und Mitglieder müssen innerhalb der Klassen deklariert werden. Statische Mitglieder öffentlicher Klassen können globale Variablen und Funktionen ersetzen.

Lokale Variablen können nicht Schatten Variablen des einschließenden Blocks, im Gegensatz zu C und C ++.

Metaprogrammierung

Metaprogrammierung kann auf verschiedene Arten erreicht werden:

  • Betrachtung wird durch .NET -APIs unterstützt, die Szenarien wie Typ -Metadaten -Inspektion und Dynamikmethode -Aufruf ermöglichen.
  • Ausdruck von Bäumen[62] Code als Zusammenfassung Syntaxbaum, wo jeder Knoten ein Ausdruck ist, der inspiziert oder ausgeführt werden kann. Dies ermöglicht die dynamische Änderung des ausführbaren Code zur Laufzeit. Ausdrucksbäume führen einige ein Homoikonizität zur Sprache.
  • Attribute sind Metadaten das kann an Typen, Mitglieder oder Ganze beigefügt werden Versammlungen, gleichwertig Anmerkungen in Java. Attribute sind sowohl für den Compiler als auch für den Code durch Reflexion zugänglich. Viele dieser Attribute duplizieren die Funktionalität von GCCs und VisualC ++ von Plattform-abhängigen Präprozessor-Richtlinien.
  • Die .NET Compiler -Plattform (Roslyn) Bietet API -Zugriff auf Sprachkompilierungsdienste und ermöglicht die Zusammenstellung von C# -Codes aus .NET -Anwendungen. Es enthüllt APIs für syntaktisch (lexikalisch) Analyse von Code, semantischer Analyse, dynamischer Zusammenstellung von CIL und Codeemission.[63]
  • Quellgeneratoren,[64] Ein Merkmal des Roslyn C# Compiler, aktivieren Sie die Kompilierungszeit -Metaprogrammierung. Während des Kompilierungsprozesses können Entwickler den mit der API des Compiler zusammengestellten Codes untersuchen und zusätzlichen generierten C# -Lockencode übergeben.

Methoden und Funktionen

Eine Methode in C# ist ein Mitglied einer Klasse, das als Funktion (eine Abfolge von Anweisungen) und nicht als bloße Wertverlustfähigkeit einer Klasseneigenschaft aufgerufen werden kann. Wie in anderen syntaktisch ähnlichen Sprachen wie C ++ und Ansi cDie Signatur einer Methode ist eine Erklärung, die in der Reihenfolge besteht: alle Schlüsselwörter für optionale Barrierefreiheit (wie z. Privatgelände), die explizite Spezifikation seines Rückgabetyps (wie z. int, oder das Schlüsselwort Leere Wenn kein Wert zurückgegeben wird), der Name der Methode und schließlich eine Klammernsequenz von von Kommas getrennten Parameterspezifikationen, die jeweils aus dem Typ eines Parameters, seinem formalen Namen und optional ein Standardwert besteht, der verwendet werden muss, wenn keiner zur Verfügung gestellt wird. Bestimmte Arten von Methoden, wie z. B. solche, die einfach eine Klasseneigenschaft durch Rückgabewert oder -zuweisung erhalten oder festlegen, erfordern keine vollständige Signatur, aber im allgemeinen Fall enthält die Definition einer Klasse die vollständige Signaturerklärung ihrer Methoden.

Wie C ++ und im Gegensatz zu Java müssen C# -Programmierer das Keyword des Geltungsmodifikators verwenden virtuell Methoden zuzulassen, um es zu sein überschrieben durch Unterklassen.[65]

Verlängerungsmethoden In C# können Programmierer statische Methoden verwenden, als wären sie Methoden aus der Methode Tabelle einer Klasse, sodass Programmierer ein Objekt hinzufügen können, das sie für dieses Objekt und seine Derivate halten sollten.

Der Typ dynamisch Ermöglicht die Bindung der Laufzeitmethoden, die JavaScript-ähnliche Methodenaufrufe und Laufzeit ermöglichen Objektzusammensetzung.

C# hat Unterstützung für stark typische Unterstützung Funktionszeiger über das Schlüsselwort delegieren. Wie das pseudo-c ++ des QT Frameworks Signal und Slot, C# verfügt über Semantik, die speziell um das Veröffentlichungs-Subscribe-Stil-Events umgeben, obwohl C# Delegierte dazu verwendet.

C# bietet Java-ähnlich synchronisiert Methodenaufrufe über das Attribut [Methodimpl (methodimploptions.ynchronized)]]und hat Unterstützung für gegenseitig exklusive Schlösser über das Schlüsselwort sperren.

Eigentum

C# unterstützt Klassen mit Eigenschaften. Die Eigenschaften können einfache Accessor -Funktionen mit einem Backing -Feld sein oder Getter- und Setterfunktionen implementieren.

Da c# 3.0 die syntethischer Zucker von automatisch implementierten Eigenschaften ist verfügbar,[66] bei dem die Accessor (Getter) und Mutator (Setter) Einkapselende Vorgänge auf einer einzigen Attribut einer Klasse.

Namespace

A C# Namespace Bietet die gleiche Ebene der Code -Isolation wie eine Java Paket oder ein c ++ namespace, mit sehr ähnlichen Regeln und Merkmalen zu a Paket. Namespaces können mit der Syntax "Verwenden" importiert werden.[67]

Speicherzugriff

In C#können Speicheradressenzeiger nur in Blöcken verwendet werden, die speziell als als gekennzeichnet sind unsicher,[68] und Programme mit unsicherem Code müssen geeignete Berechtigungen ausführen. Der größte Teil des Objektzugriffs erfolgt über sichere Objektreferenzen, die immer entweder auf ein "lebendes" Objekt oder das gut definierte Objekt hinweisen Null Wert; Es ist unmöglich, einen Verweis auf ein "toter" Objekt (einen Müll gesammelt) oder auf einen zufälligen Speicherblock zu erhalten. Ein unsicherer Zeiger kann auf eine Instanz eines "nicht verwalteten" Werttyps verweisen, der keine Referenzen auf garbarby-gesammelte Objekte, Array, String oder einen Stapelblock zu Adalocated-Speicher enthält. Code, der nicht als unsicher gekennzeichnet ist System.intptr Typ, aber es kann sie nicht Dereference.

Managed Memory kann nicht explizit befreit werden; Stattdessen wird automatisch Müll gesammelt. Die Müllsammlung befasst sich mit dem Problem von Speicherlecks Indem Sie den Programmierer für die Verantwortung für die Veröffentlichung von Speicher befreien, der in den meisten Fällen nicht mehr benötigt wird. Der Code, der länger als benötigte Verweise auf Objekte behält, kann immer noch eine höhere Speicherverwendung als notwendig erleben. Sobald der endgültige Verweis auf ein Objekt veröffentlicht wurde, ist der Speicher für die Müllsammlung verfügbar.

Ausnahme

Für Programmierer steht eine Reihe von Standardausnahmen zur Verfügung. Methoden in Standardbibliotheken werfen regelmäßig Systemausnahmen unter bestimmten Umständen und der Bereich der geworfenen Ausnahmen werden normalerweise dokumentiert. Für Klassen können benutzerdefinierte Ausnahmeklassen definiert werden, sodass ein spezifisches Handling für bestimmte Umstände bei Bedarf eingeführt werden kann.[69]

Überprüfte Ausnahmen sind in C# nicht vorhanden (im Gegensatz zu Java). Dies war eine bewusste Entscheidung, die auf den Fragen der Skalierbarkeit und Versionbarkeit beruhte.[70]

Polymorphismus

nicht wie C ++, C# unterstützt nicht Mehrfacherbe, obwohl eine Klasse eine beliebige Anzahl von "implementieren kann"Schnittstellen"(vollständig abstrakte Klassen). Dies war eine Entwurfsentscheidung des Hauptarchitekten der Sprache, um Komplikationen zu vermeiden und die architektonischen Anforderungen in der gesamten CLI zu vereinfachen.

Bei der Implementierung mehrerer Schnittstellen, die eine Methode mit demselben Namen enthalten und Parameter desselben Typs in derselben Reihenfolge nehmen (d. H. Gleiche Unterschrift), ähnlich zu JavaMit C# ermöglicht es sowohl eine einzelne Methode abdecken alle Schnittstellen als auch bei Bedarf spezifische Methoden für jede Schnittstelle.

Im Gegensatz zu Java unterstützt C# jedoch unterstützt Bedienerüberlastung.[71]

Sprachintegrierte Abfrage (LINQ)

C# hat die Möglichkeit zu nutzen Linq durch das .NET -Framework. Ein Entwickler kann eine Vielzahl von Datenquellen abfragen, die bereitgestellt werden Ienumerable Die Schnittstelle wird im Objekt implementiert. Dies umfasst XML -Dokumente, eine Ado.net Datenbanken für Datensatz und SQL.[72]

Die Verwendung von Linq in C# bringt Vorteile wie Intellisense Unterstützung, starke Filterfunktionen, Type Sicherheit mit Kompilierfehlerüberprüfungsfähigkeit und Konsistenz für die Abfrage von Daten über eine Vielzahl von Quellen.[73] Es gibt verschiedene Sprachstrukturen, die mit C# und Linq verwendet werden können, und es handelt sich um Abfragesausdrücke, Lambda -Ausdrücke, anonyme Typen, implizit getippte Variablen, Erweiterungsmethoden und Objektinitialisierer.[74]

Funktionelle Programmierung

Obwohl C# 2.0 in erster Linie eine imperative Sprache hat, bot er eine begrenzte Unterstützung für funktionale Programmierung durch erstklassige Funktionen und Schließungen in Form von anonymen Delegierten.[75] C# 3.0 Erweiterte Unterstützung für die funktionale Programmierung mit der Einführung einer leichten Syntax für Lambda -Ausdrücke,[75] Erweiterungsmethoden (eine Gewährung von Modulen) und a Listenverständnis Syntax in Form einer Sprache "Abfrageverständnis". C# 7.0 fügt Funktionen hinzu, die normalerweise in funktionalen Sprachen wie Tupeln, lokalen Funktionen und gefunden werden Musteranpassung.[76] C# 9.0 führt die Datensatzfunktion ein[77] Dies ist hauptsächlich für eine bessere Unterstützung unveränderlicher Datenmodelle erstellt.

Gemeinsames Typsystem

C# hat a Einheitliches Typsystem. Dieses einheitliche Typsystem wird aufgerufen Gemeinsames Typsystem (CTS).[78]

Ein einheitliches Typsystem impliziert, dass alle Typen, einschließlich Primitiven wie Ganzzahlen, Unterklassen der sind System.Object Klasse. Zum Beispiel erbt jeder Typ a ToString() Methode.

Kategorien von Datentypen

CTS trennt Datentypen in zwei Kategorien:[78]

  1. Referenztypen
  2. Werttypen

Instanzen von Werttypen haben weder eine Referenzidentität noch eine Referenzvergleichsemantik. Gleichheit und Ungleichheitsvergleiche für Werttypen vergleichen die tatsächlichen Datenwerte innerhalb der Instanzen, sofern die entsprechenden Bediener nicht überlastet sind. Werttypen werden abgeleitet von System.ValueTypeHaben Sie immer einen Standardwert und können immer erstellt und kopiert werden. Einige andere Einschränkungen für Werttypen sind, dass sie nicht voneinander ableiten können (aber Schnittstellen implementieren können) und keinen expliziten Standard (parameterlosen) Konstruktor haben können. Beispiele für Werttypen sind alle primitiven Typen, wie z. int (eine signierte 32-Bit-Ganzzahl), float (Eine 32-Bit-IEEE-schwimmende Punktzahl), char (eine 16-Bit-Unicode-Code-Einheit) und System.DateTime (Identifiziert einen bestimmten Zeitpunkt mit Nanosekundengenauigkeit). Andere Beispiele sind enum (Aufzählungen) und struct (Benutzerdefinierte Strukturen).

Im Gegensatz dazu haben Referenztypen den Begriff der Referenzidentität, was bedeutet, dass sich jede Instanz eines Referenztyps von Natur aus von jeder anderen Instanz unterscheidet, selbst wenn die Daten in beiden Fällen gleich sind. Dies spiegelt sich in der Standardgleichheit und in Ungleichheitsvergleiche für Referenztypen wider, die eher auf referenzielle als auf strukturelle Gleichheit testen, es sei denn System.String). Einige Operationen sind nicht immer möglich, z. B. das Erstellen einer Instanz eines Referenztyps, das Kopieren einer vorhandenen Instanz oder die Durchführung eines Wertvergleichs für zwei vorhandene Instanzen. Obwohl bestimmte Referenztypen solche Dienste bereitstellen können, indem ein öffentlicher Konstruktor aufgedeckt oder eine entsprechende Schnittstelle implementiert wird (wie z. ICloneable oder IComparable). Beispiele für Referenztypen sind object (Die ultimative Basisklasse für alle anderen C# -Klasses), System.String (eine Reihe von Unicode -Zeichen) und System.Array (Eine Basisklasse für alle C# -Arrays).

Beide Typkategorien sind mit benutzerdefinierten Typen erweiterbar.

Boxen und Unboxen

Boxen Ist der Betrieb des Umwandlung eines Wertstyps in einen Wert eines entsprechenden Referenztyps.[78] Das Boxen in C# ist implizit.

Unboxing Ist der Betrieb des Umwandlung eines Wertes eines Referenztyps (zuvor unterbrochen) in einen Wert eines Werttyps.[78] Das Unboxing in C# erfordert eine explizite Typ Cast. Ein Box -Objekt vom Typ t kann nur auf ein T (oder ein nullierbares t) nicht enttäuscht werden.[79]

Beispiel:

int Foo = 42;  // Werttyp. Objekt Bar = Foo;  // Foo wird in die Bar gepoppt. int foo2 = (int)Bar;  // Unboxed zurück zum Werttyp. 

Bibliotheken

In der C# -Pezifikation wird ein Mindestsatz von Typen und Klassenbibliotheken beschrieben, die der Compiler erwartet. In der Praxis wird C# am häufigsten mit einer Implementierung der verwendet Gemeinsame Sprachinfrastruktur (CLI), das als ECMA-335 standardisiert ist Gemeinsame Sprachinfrastruktur (CLI).

Zusätzlich zu den Standard -CLI -Spezifikationen gibt es viele kommerzielle und Community -Klassenbibliotheken, die auf den .NET -Framework -Bibliotheken aufbauen, um zusätzliche Funktionen zu liefern.[80]

C# kann an jeder in der enthaltenen Bibliothek Anrufe tätigen Liste der .NET -Bibliotheken und Frameworks.

Beispiele

Hallo Welt

Das Folgende ist ein sehr einfaches C# -Programm, eine Version des Klassiker "Hallo Welt"Beispiel unter Verwendung der in C# 9 eingeführten obersten Aussagen-Funktionen:[81]

Verwendung System; Konsole.Schreiben("Hallo Welt!"); 

Für den Code, der als C# 8 oder niedriger geschrieben wurde, muss die Einstiegspunktlogik eines Programms in einer Hauptmethode innerhalb eines Typs geschrieben werden:

Verwendung System; // Eine Version des klassischen "Hello World" -Programms Klasse Programm {  statisch Leere Hauptsächlich()  {  Konsole.Schreiben("Hallo Welt!");  } } 

Dieser Code zeigt diesen Text im Konsolenfenster an:

Hallo Welt!

Jede Zeile hat einen Zweck:

Verwendung System; 

Die obige Zeile importiert alle Arten in der System Namespace. Zum Beispiel die Konsole Die später im Quellcode verwendete Klasse wird in der definiert System Namespace, dh es kann verwendet werden, ohne den vollständigen Namen des Typs anzugeben (der den Namespace enthält).

// Eine Version des klassischen "Hello World" -Programms 

Diese Zeile ist ein Kommentar; Es beschreibt und dokumentiert den Code für den Programmierer.

Klasse Programm 

Oben ist a Klasse Definition für die Program Klasse. Alles, was zwischen dem Klammpaar folgt, beschreibt diese Klasse.

{  ... } 

Die lockigen Klammern haben die Grenzen eines Codeblocks abgebaut. In diesem ersten Fall markieren sie den Start und das Ende der Program Klasse.

statisch Leere Hauptsächlich() 

Dies erklärt die Klassenmitgliedmethode, bei der das Programm mit der Ausführung beginnt. Die .NET -Laufzeit ruft die auf Main Methode. Anders als in Java, das Main Methode braucht die nicht public Schlüsselwort, das dem Compiler mitteilt, dass die Methode von überall nach jeder Klasse aufgerufen werden kann.[82] Schreiben static void Main(string[] args) entspricht dem Schreiben private static void Main(string[] args). Das Statisches Schlüsselwort macht die Methode ohne eine Instanz von zugänglich Program. Jede Konsolenanwendung Main Einstiegspunkt muss deklariert werden static Andernfalls würde das Programm eine Instanz von erfordern ProgramAber jede Instanz würde ein Programm erfordern. Um dies irresolvierbar zu vermeiden Zirkularabhängigkeit, C# Compiler -Verarbeitung Konsolenanwendungen (so oben oben) Melden Sie einen Fehler, wenn es keine gibt static Main Methode. Das void Schlüsselwort erklärt das Main hat kein Rückgabewert.

Konsole.Schreiben("Hallo Welt!"); 

Diese Zeile schreibt die Ausgabe. Console ist eine statische Klasse in der System Namespace. Es bietet eine Schnittstelle zu den Standardeingangs-, Ausgabe- und Fehlerströmen für Konsolenanwendungen. Das Programm nennt die Console Methode WriteLine, die auf der Konsole eine Linie mit dem Argument anzeigen, die Zeichenfolge, "Hello, world!".

GUI

Ein Fenster GUI Beispiel:

Verwendung System; Verwendung System.Windows.forms; Klasse Programm {  statisch Leere Hauptsächlich()  {  Nachrichtenbox.Zeigen("Hallo Welt!");  Konsole.Schreiben("Ist fast das gleiche Argument!");  } } 

Dieses Beispiel ähnelt dem vorherigen Beispiel, außer dass es a generiert wird Dialogbox Das enthält die Nachricht "Hallo, Welt!" anstatt es in die Konsole zu schreiben.

Bilder

Eine andere nützliche Bibliothek ist die System.Drawing Bibliothek, die zum programmatisch Zeichnen von Bildern verwendet wird. Zum Beispiel:

Verwendung System; Verwendung System.Drawing; Öffentlichkeit Klasse Beispiel {  Öffentlichkeit statisch Bild img;  statisch Leere Hauptsächlich()  {  img = Bild.Aus Datei("Image.png");  } } 

Dies erzeugt ein Bild, das mit dem in "Image.png" gespeicherten identisch ist.

Standardisierung und Lizenzierung

Im August 2001, Microsoft, Hewlett Packard und Intel sponserte die Einreichung von Spezifikationen für C# sowie die Gemeinsame Sprachinfrastruktur (CLI) zur Standardorganisation ECMA International. Im Dezember 2001 veröffentlichte ECMA ECMA-334 C# Sprachspezifikation. C# wurde ein ISO/IEC Standard im Jahr 2003 (ISO/IEC 23270: 2003 - Informationstechnologie - Programmiersprachen - C#). Die ECMA hatte zuvor äquivalente Spezifikationen als 2. Ausgabe von C# im Dezember 2002 angewendet. Im Juni 2005 genehmigte die ECMA Ausgabe 3 der C# -Pezifikation und aktualisierte ECMA-334. Zu den Ergänzungen gehörten Teilklassen, anonyme Methoden, nullbare Typen und Generika (etwas ähnlich wie C ++ Vorlagen). Im Juli 2005 hat ECMA über den Fast-Track-Prozess des letzteren, die Standards und die verwandten TRS bei ISO/IEC JTC 1/SC 22 eingereicht. Dieser Prozess dauert normalerweise 6 bis 9 Monate.

Die C# -Sprachdefinition und die Cli sind standardisiert unter ISO/IEC und ECMA Standards, die bieten angemessene und nicht diskriminierende Lizenzierung Schutz vor Patentansprüchen.

Microsoft stimmte zunächst zu, Open-Source-Entwickler nicht wegen Verstoßes gegen Patente in gemeinnützigen Projekten für den Teil des Rahmens zu verklagen, der durch das OSP berücksichtigt wird.[83] Microsoft hat sich auch bereit erklärt, Patente in Bezug auf die Beziehung zu erzwingen Novell Produkte gegen Novells zahlende Kunden[84] Mit Ausnahme einer Liste von Produkten, in denen C#, .NET oder Novell von .NET (Novell -Implementierung (Novell) nicht ausdrücklich erwähnt werden (Das Mono -Projekt).[85] Novell behauptete jedoch, dass Mono keine Microsoft -Patente verletzt.[86] Microsoft hat auch eine spezifische Vereinbarung getroffen, die Patentrechte im Zusammenhang mit dem nicht durchzusetzen Moonlight Browser Plugin, was von Mono abhängt, vorausgesetzt, es wird durch Novell erhalten.[87]

Ein Jahrzehnt später begann Microsoft mit der Entwicklung von kostenlosen Tools für C#für C#, nämlich die Plattformwerkzeuge für C#, nämlich Visual Studio -Code, .NET CORE, und Roslyn. Mono schloss sich Microsoft als Projekt von an Xamarin, eine Microsoft -Tochter.

Implementierungen

Microsoft leitet die Entwicklung der Open Source Referenz C# Compiler und Werkzeuge. Der erste Compiler, Roslyn, kompiliert in mittlere Sprache (IL) und die zweite, ryujit,[88] ist ein JIT-Compiler (Just-in-Time), der dynamisch ist und die Optimierung im Fliege durchführt und das IL in nativen Code für das Front-End der CPU kompiliert.[89] Ryujit ist Open Source und geschrieben in C ++.[90] Roslyn ist vollständig geschrieben in verwalteter Code (C#), wurde geöffnet und die Funktionalität als APIs aufgetaucht. Daher ermöglicht es Entwicklern, Refactoring- und Diagnostik -Tools zu erstellen.[5][91] Zwei Zweige der offiziellen Implementierung sind .NET Framework (Closed-Source, nur Windows) und .NET Core (Open-Source, plattformübergreifend); Sie konvergierten schließlich zu einer Open-Source-Implementierung: .NET 5.0.[92] Bei .NET Framework 4.6 ersetzte ein neuer JIT -Compiler den ersteren.[88][93]

Andere C# -Compiler (von denen einige eine Implementierung der umfassen Gemeinsame Sprachinfrastruktur und .NET -Klassenbibliotheken):

  • Mono, Ein von Microsoft gesponsertes Projekt bietet einen Open-Source-C# Compiler, eine vollständige Open-Source-Implementierung der CLI (einschließlich der erforderlichen Framework-Bibliotheken, wie sie in der ECMA-Spezifikation angezeigt werden) und eine nahezu vollständige Implementierung der Nettoklassenbibliotheken bis zu .NET Framework 3.5.
  • Das Elemente Werkzeugkette von Remobjekte Enthält RemObjects C#, die C# Code in .NETs kompiliert Gemeinsame Zwischensprache, Java -Bytecode, Kakao, Android -Bytecode, WebAssemblyund nativen Maschinencode für Windows, MacOS und Linux.
  • Das Dotgnu Projekt (jetzt eingestellt) bot auch einen Open-Source-C# Compiler, eine nahezu vollständige Implementierung der gemeinsamen Sprachinfrastruktur, einschließlich der erforderlichen Framework-Bibliotheken, wie sie in der ECMA zu .net 2.0 (die nicht dokumentiert oder in der ECMA -Spezifikation enthalten, sondern in Microsoft Standard .NET Framework Distribution enthalten).

Das Unity Game Engine Verwendet C# als primäre Skriptsprache. Das Godot Game Engine hat dank einer Spende von 24.000 US -Dollar von Microsoft ein optionales C# -Modul implementiert.[94]

Siehe auch

Anmerkungen

  1. ^ Für Async
  2. ^ Nach Übereinkommen, a Nummernschild wird für das zweite Zeichen im normalen Text verwendet; in künstlerischen Darstellungen manchmal ein wahres scharfes Zeichen wird verwendet: c♯. Jedoch das ECMA 334 Standardstaaten: "Der Name C # ist als lateinischer Kapitalbuchstaben C (U+0043) geschrieben, gefolgt vom Zahlenzeichen # (U+0023)."
  3. ^ Das Microsoft C# 2.0 -Spezifikationsdokument enthält nur die neuen 2.0 -Funktionen. Verwenden Sie für ältere Funktionen die oben genannte 1.2 -Spezifikation.

Verweise

  1. ^ "Infoq Emag: Eine Vorschau von C# 7".
  2. ^ https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/.
  3. ^ https://devblogs.microsoft.com/dotnet/early-peek-at-csharp-11-features/.
  4. ^ TORGERSEN, MADS (27. Oktober 2008). "Neue Funktionen in C# 4.0". Microsoft. Abgerufen 28. Oktober, 2008.
  5. ^ a b "Der Roslyn .NET Compiler bietet C# und visuelle Grundsprachen mit reichen Codeanalyse -APIs: Dotnet/Roslyn". 13. November 2019 - über Github.
  6. ^ "CoreClr ist die Laufzeit für .NET Core. Es umfasst den Müllkollektor, den JIT-Compiler, die primitiven Datentypen und die Klassen mit niedriger Ebene: Dotnet/CoreClr". 13. November 2019 - über Github.
  7. ^ a b Naugler, David (Mai 2007). "C# 2.0 für C ++ und Java -Programmierer: Conference Workshop". Journal of Computing Sciences in Colleges. 22 (5). Obwohl C# stark von Java beeinflusst wurde, wurde es auch stark von C ++ beeinflusst und wird am besten als Nachkomme von C ++ und Java angesehen.
  8. ^ Hamilton, Naomi (1. Oktober 2008). "Der A-Z der Programmiersprachen: C#". Computerwelt. Abgerufen 12. Februar, 2010. Wir alle stehen hier auf den Schultern von Riesen und jede Sprache baut darauf auf, was zuvor vor sich ging, und wir schulden C, C ++, Java, Delphi, all diese anderen Dinge, die vor uns kamen. (Anders Hejlsberg)
  9. ^ "Chapel Spec (Anerkennung)" (PDF). Cray Inc. 1. Oktober 2015. Abgerufen 14. Januar, 2016.
  10. ^ "Rich Hickey Q & A von Michael Fogus". Archiviert von das Original am 11. Januar 2017. Abgerufen 11. Januar, 2017.
  11. ^ Borenszweig, Ary (14. Juni 2016). "Crystal 0.18.0 veröffentlicht!". Es ist stark von Ruby und anderen Sprachen (wie C#, Go und Python) inspiriert.
  12. ^ "Websprachen und VMs: Fast Code ist immer in Mode. (V8, Dart) - Google I/O 2013". Youtube. Archiviert vom Original am 21. Dezember 2021. Abgerufen 22. Dezember, 2013.
  13. ^ Java 5.0 fügte mehrere neue Sprachfunktionen hinzu (die für Schleife erweitert, Autoboxen, Varargs und Anmerkungen), nachdem sie in der ähnlichen (und konkurrierenden) C# -Sprache eingeführt wurden [1] [2]
  14. ^ Cornelius, Barry (1. Dezember 2005). "Java 5 holt C#ein". Universität von Oxford Computerdienste. Abgerufen 18. Juni, 2014. Meiner Meinung nach ist es C#, das diese radikalen Änderungen an der Java -Sprache verursacht hat. (Barry Cornelius)
  15. ^ Lattner, Chris (3. Juni 2014). "Chris Lattners Homepage". Chris Lattner. Abgerufen 12. Mai, 2020. Die schnelle Sprache ist das Produkt unermüdlicher Anstrengungen eines Teams von Sprachenexperten, Dokumentations-Gurus, Compiler-Optimierung Ninjas und einer unglaublich wichtigen internen Dogfooding-Gruppe, die Feedback zur Verfeinerung und den Schlachtstest-Ideen gab. Natürlich profitierte es auch stark von den Erlebnissen, die viele andere Sprachen auf diesem Gebiet hart erkannt haben und Ideen von Objective-C, Rost, Haskell, Ruby, Python, C#, CLU und viel zu vielen anderen zeichnen, um aufzulisten.
  16. ^ a b c C# Sprachspezifikation (PDF) (4. Aufl.). ECMA International. Juni 2006. Abgerufen 26. Januar, 2012.
  17. ^ "Willkommen bei C# 10". 8. November 2021.
  18. ^ "Ankündigung .NET 6 - das bisher schnellste .net bisher". 8. November 2021.
  19. ^ "Designziele von C#". www.java-samples.com. Abgerufen 6. Oktober, 2021.
  20. ^ Zander, Jason (22. November 2007). "Ein paar historische Fakten". Abgerufen 23. Februar, 2009.
  21. ^ Guthrie, Scott (28. November 2006). "In welcher Sprache wurde ASP.net ursprünglich geschrieben?". Archiviert von das Original am 24. Juni 2016. Abgerufen 21. Februar, 2008.
  22. ^ Hamilton, Naomi (1. Oktober 2008). "Der A-Z der Programmiersprachen: C#". Computerwelt. Archiviert von das Original am 18. Mai 2019. Abgerufen 1. Oktober, 2008.
  23. ^ "Einzelheiten". nilsnaegele.com. Archiviert von das Original am 7. April 2019. Abgerufen 7. April, 2019.
  24. ^ Wylie Wong (2002). "Warum Microsofts C# nicht". CNE: CBS Interactive. Abgerufen 28. Mai, 2014.
  25. ^ Bill Joy (7. Februar 2002). "Microsofts blinder Fleck". cnet.com. Abgerufen 12. Januar, 2010.
  26. ^ Klaus Kreft und Angelika Langer (2003). "Nach Java und C# - was kommt als nächstes?". Abgerufen 18. Juni, 2013.
  27. ^ Klaus Kreft und Angelika Langer (3. Juli 2003). "Nach Java und C# - was kommt als nächstes?". artima.com. Abgerufen 12. Januar, 2010.
  28. ^ Osborn, John (1. August 2000). "Tief in C#: Ein Interview mit Microsoft Chief Architect Anders Hejlsberg". O'Reilly Media. Abgerufen 14. November, 2009. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  29. ^ "Generics (C# Programmierhandbuch)". Microsoft. Abgerufen 21. März, 2011.
  30. ^ Don Box und Anders Hejlsberg (Februar 2007). "Linq: .NET Sprachintegrierte Abfrage". Microsoft. Abgerufen 21. März, 2011.
  31. ^ Mercer, Ian (15. April 2010). "Warum funktionelle Programmierung und Linq oft besser sind als der prozessuale Code". Abodit.com. Abgerufen 21. März, 2011.
  32. ^ "Andy geht in den Ruhestand". Dan Fernandez 'Blog. Blogs.msdn.com. 29. Januar 2004. archiviert von das Original am 19. Januar 2016. Abgerufen 4. Oktober, 2012.
  33. ^ "Technische Komitees - JTC 1/SC 22 - Programmiersprachen, ihre Umgebungen und Systemsoftware -Schnittstellen". ISO. Abgerufen 4. Oktober, 2012.
  34. ^ "ISO/IEC 23270: 2003 - Informationstechnologie - C# Sprachspezifikation". ISO.org. 23. August 2006. archiviert von das Original am 8. Mai 2012. Abgerufen 4. Oktober, 2012.
  35. ^ "ISO/IEC 23270: 2006 - Informationstechnologie - Programmiersprachen - C#". ISO.org. 26. Januar 2012. Abgerufen 4. Oktober, 2012.
  36. ^ "SO/IEC 23270: 2018 Informationstechnologie - Programmiersprachen - C#". ISO. Abgerufen 26. November, 2020.
  37. ^ Mariani, Rico. "Meine Geschichte von Visual Studio (Teil 1) - Rico Marianis Performance Tidbits". Rico Marianis Performance Tidbits.
  38. ^ Kovacs, James (7. September 2007). "C#/. Netzgeschichtsstunde". Abgerufen 18. Juni, 2009.
  39. ^ Hejlsberg, Anders (1. Oktober 2008). "Der A-Z der Programmiersprachen: C#". Computerwelt.
  40. ^ "Microsoft C# FAQ". Microsoft. Archiviert von das Original am 14. Februar 2006. Abgerufen 25.März, 2008.
  41. ^ "F# FAQ". Microsoft Research. Archiviert von das Original am 18. Februar 2009. Abgerufen 18. Juni, 2009.
  42. ^ Simon, Raphael; Stapp, Emmanuel; Meyer, Bertrand (Juni 2002). "Voller Eiffel auf dem .NET -Framework". Microsoft. Abgerufen 18. Juni, 2009.
  43. ^ "Was ist neu in der Sprache und Compiler von C# 2.0". Microsoft. Archiviert von das Original am 18. Dezember 2010. Abgerufen 11. Juni, 2014.
  44. ^ Hejlsberg, Anders; TORGERSEN, MADS. "Überblick über C# 3.0". Microsoft Developer Network. Microsoft. Abgerufen 11. Juni, 2014.
  45. ^ a b "Verwenden Sie C# 3.0 von .NET 2.0". Danielmoth.com. 13. Mai 2007. Abgerufen 4. Oktober, 2012.
  46. ^ Hejlsberg, Anders. "Zukünftige Anweisungen für C# und visuelle Basic". C# leitender Architekt. Microsoft. Abgerufen 21. September, 2011.
  47. ^ "Eine Einführung in neue Funktionen in C# 5.0". MSDN Blogs. Microsoft. Archiviert von das Original am 4. Juni 2014. Abgerufen 11. Juni, 2014.
  48. ^ "Status der Sprachfunktion Implementierung" ". Github. Microsoft. Archiviert von das Original am 12. Januar 2016. Abgerufen 13. Februar, 2015.
  49. ^ "Was ist neu in C# 7". Microsoft Docs. 21. Dezember 2016.
  50. ^ "Neue Funktionen in C# 7.0". .NET Blog. 9. März 2017. Abgerufen 9. Juni, 2017.
  51. ^ "Was ist neu in C# 7.1". Microsoft Docs. Abgerufen 9. Oktober, 2017.
  52. ^ "Visual Studio 2017 15.3 Versionshinweise". docs.microsoft.com.
  53. ^ "Was ist neu in C# 7.2". Microsoft Docs. Abgerufen 26. November, 2017.
  54. ^ a b "Visual Studio 2017 15.9 Versionshinweise". docs.microsoft.com.
  55. ^ "Was ist neu in C# 7.3". Microsoft Docs. Abgerufen 23. Juni, 2018.
  56. ^ "Was ist neu in C# 8.0". Microsoft Docs.
  57. ^ a b "Visual Studio 2019 16.8 Versionshinweise". docs.microsoft.com.
  58. ^ Billwagner. "Was ist neu in C# 9.0 - C# Guide". docs.microsoft.com. Abgerufen 15. Oktober, 2020.
  59. ^ "Was ist neu in C# 10". docs.microsoft.com. Abgerufen 10. November, 2021.
  60. ^ "Visual Studio 2022 Version 17.0 Versionsnotizen". docs.microsoft.com.
  61. ^ Visual Studio 2010 und .NET 4 Six-in-One. Wrox Press. 2010. ISBN 978-0470499481.
  62. ^ Billwagner. "Ausdruck Bäume (C#)". docs.microsoft.com. Abgerufen 14. Mai, 2021.
  63. ^ McAllister, Neil (20. Oktober 2011). "Microsofts Roslyn: Erfunden Sie den Compiler neu, wie wir es kennen". InfoWorld. Abgerufen 5. März, 2022.
  64. ^ "Einführung von C# Quellgeneratoren". .NET Blog. 29. April 2020. Abgerufen 14. Mai, 2021.
  65. ^ "Virtual (C# Referenz)". docs.microsoft.com.
  66. ^ "Automatisch implementierte Eigenschaften (C# Programmierhandbuch)". Abgerufen 12. September, 2020.
  67. ^ "Verwenden von Anweisungen - C# Referenz". Microsoft Docs. Abgerufen 14. April, 2019.
  68. ^ Billwagner. "Unsicherer Code, Zeiger auf Daten und Funktionszeiger". docs.microsoft.com. Abgerufen 20. Juni, 2021.
  69. ^ "So erstellen Sie benutzerdefinierte Ausnahmen". Abgerufen 12. September, 2020.
  70. ^ Venners, Bill; Eckel, Bruce (18. August 2003). "Das Problem mit geprüften Ausnahmen". Abgerufen 30. März, 2010.
  71. ^ Billwagner. "Operator Overloading - C# Referenz". docs.microsoft.com. Abgerufen 20. Juni, 2021.
  72. ^ Zhang, Xue Dong; Teng, Zi Mu; Zhao, Dong Wang (September 2014). "Forschung der Datenbankzugriffstechnologie unter.net Framework". Angewandte Mechanik und Materialien. 644–650: 3077–3080. doi:10.4028/www.scientific.net/amm.644-650.3077. S2CID 62201466. Proquest 1565579768.
  73. ^ Otey, Michael (Februar 2006). "Linq in die Zukunft". SQL Server Magazine. Vol. 8, nein. 2. S. 17–21. Proquest 214859896.
  74. ^ Sheldon, William (November 2010). "Neue Funktionen in Linq". SQL Server Magazine. Vol. 12, nein. 11. S. 37–40. Proquest 770609095.
  75. ^ a b Billwagner. "Anonyme Funktionen - C# Programmierhandbuch". docs.microsoft.com. Abgerufen 15. Mai, 2021.
  76. ^ "Was ist neu in C# 7.0". Microsoft Docs. Abgerufen 14. April, 2019.
  77. ^ "C# 9.0 auf dem Datensatz". .NET Blog. 10. November 2020. Abgerufen 15. Mai, 2021.
  78. ^ a b c d Archer, Tom (2001). "Teil 2, Kapitel 4: Das Typsystem". Innen C#. Redmond, Washington: Microsoft Press. ISBN 0-7356-1288-9.
  79. ^ Lippert, Eric (19. März 2009). "Darstellung und Identität". Fabelhafte Abenteuer in der Codierung. Blogs.msdn.com. Abgerufen 4. Oktober, 2012.
  80. ^ "Framework Libraries". docs.microsoft.com.
  81. ^ Billwagner. "Was ist neu in C# 9.0 - C# Guide". docs.microsoft.com. Abgerufen 14. Mai, 2021.
  82. ^ Billwagner. "Main () und Befehlszeilenargumente". docs.microsoft.com. Abgerufen 5. August, 2021.
  83. ^ "Patentversprechen für Open Source -Entwickler".
  84. ^ "Patentkooperationsvereinbarung - Microsoft & Novell Interoperability Collaboration". Microsoft. 2. November 2006. archiviert von das Original am 17. Mai 2009. Abgerufen 5. Juli, 2009. Microsoft, im Namen von sich selbst und seinen Tochtergesellschaften (zusammen "Microsoft"), hiermit Covenants, die Kunden von Novell und die Kunden von Novells Tochtergesellschaften wegen Verstoßes gegen Microsoft durch einen solchen Kunden durch die Verwendung eines solchen Kunden eines gedeckten Produkts nicht verklagen. Verteilt von Novell oder seinen Tochtergesellschaften (zusammen "Novell"), für die Novell für solche spezifischen Kopien Einnahmen (direkt oder indirekt) erhalten hat; vorausgesetzt, der vorstehende Bund ist beschränkt auf die Verwendung von solchen Kunden (i) solcher spezifischen Kopien, die von Novell zur Prüfung für diese Einnahmen genehmigt wurden, und (ii) innerhalb des von Novell unter Berücksichtigung dieser Einnahmen genehmigten Geltungsbereichs.
  85. ^ "Definitionen". Microsoft. 2. November 2006. Abgerufen 5. Juli, 2009.
  86. ^ Steinman, Justin (7. November 2006). "Novell beantwortet Fragen aus der Community". Abgerufen 5. Juli, 2009. Wir behaupten, dass Mono keine Microsoft -Patente verletzt.
  87. ^ "Bund an nachgelagerte Empfänger von Moonlight - Microsoft & Novell Interoperability Collaboration". Microsoft. 28. September 2007. archiviert von das Original am 23. September 2010. Abgerufen 8. März, 2008. "Downstream -Empfänger" bezeichnet eine Entität oder Person, die für ihren beabsichtigten Zweck eine Mondlicht -Implementierung verwendet, die direkt aus Novell oder durch einen Zwischenempfänger erhalten wird ... Microsoft behält sich das Recht vor, den vorstehenden Bund zu aktualisieren (einschließlich Einstellung). bedeutet nur die spezifischen Teile von Moonlight 1.0 oder Moonlight 1.1, die nur als Plug-In zu einem Browser auf einem PC-Computer ausgeführt werden und nicht unter GPLV3 oder einer ähnlichen Lizenz lizenziert sind.
  88. ^ a b "Der Ryujit -Übergang ist vollständig!". microsoft.com. 19. Juni 2018. Archiviert Aus dem Original am 19. Juli 2019. Abgerufen 20. Juli, 2021.
  89. ^ "Managed Execution Process". microsoft.com. Archiviert Aus dem Original am 23. Dezember 2017. Abgerufen 20. Juli, 2021.
  90. ^ "Coreclr/src/jit/". github.com. Archiviert Aus dem Original am 9. Januar 2019. Abgerufen 20. Juli, 2021.
  91. ^ "C# Guide". docs.microsoft.com.
  92. ^ "5.0.8". microsoft.com. Archiviert vom Original am 23. April 2020. Abgerufen 20. Juli, 2021.
  93. ^ "Minderung: neuer 64-Bit-JIT-Compiler". microsoft.com. Archiviert Aus dem Original am 5. April 2018. Abgerufen 20. Juli, 2021.
  94. ^ Ätzeverry, Ignacio (21. Oktober 2017). "C# in Godot vorstellen". Godot -Motor. Archiviert Aus dem Original am 26. Oktober 2018. Abgerufen 26. Oktober, 2018.

Weitere Lektüre

Externe Links