C-Sharp
C# | |
---|---|
Paradigmen: | multiparadigmatisch: strukturiert, imperativ, deklarativ, objektorientiert, ereignisorientiert, funktional, generisch, reflexiv, parallel |
Erscheinungsjahr: | 2001 |
Designer: | Anders Hejlsberg |
Entwickler: | Microsoft |
Aktuelle Version: | 6.0 (20. Juli 2015) |
Typisierung: | statisch, stark, explizit (optional: dynamisch, duck, implizit) |
Wichtige Implementierungen: | Visual C#, Mono |
Standardisierungen: | ECMA-334 |
Beeinflusst von: | Java, C++ und Object Pascal |
Beeinflusste: | Java,[1] Vala, Cω, Swift |
Betriebssystem: | alle, für die eine CLI-Implementierung existiert (z. B. Microsofts .NET Framework oder Xamarins Mono) |
Visual C# |
C# (englisch c sharp [ ]) ist eine typsichere, objektorientierte Allzweck-Programmiersprache. Architekt der Sprache ist Anders Hejlsberg im Auftrag von Microsoft. Die Sprache ist an sich plattformunabhängig, wurde aber im Rahmen der .NET-Strategie entwickelt, ist auf diese optimiert und ist meist in deren Kontext zu finden. Microsoft bezeichnet seine Implementierung als Visual C#.
Historisch wurde in C# fast exklusiv für Microsoft Windows entwickelt. Durch Xamarin ist es aber auch möglich für OS X, iOS und Android zu entwickeln. Zudem unterstützt ASP.NET seit Version 5 auch GNU/Linux und OS X.[2]
Die aktuelle Version 6 wurde als Teil von .NET 2015 veröffentlicht[3] und ist allein durch Microsoft spezifiziert.[4] Bis Version 2 war die Sprache bei der ECMA[5] und der ISO[6] als Standard registriert.
Konzept
C# greift Konzepte der Programmiersprachen Java, C++, Haskell, C sowie 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 lässt sich mit Funktionszeigern vergleichen. Im Unterschied zu diesen enthalten Delegate zusätzlich auch Verweise auf die zu den Methoden gehörenden Objekte. Ein Aufruf eines Delegaten ruft also Methoden auf, denen 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 Compilierung 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 Mac OS X 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
Jahr | .NET-Version | C#-Version | zusätzlich eingeführte Sprachelemente |
---|---|---|---|
2002 | .NET 1.0 | C# 1.0 | — |
2003 | .NET 1.1 | C# 1.2 | |
2005 | .NET 2.0 | C# 2.0 |
|
2006 | .NET 3.0 | ||
2007 | .NET 3.5 | C# 3.0 |
|
2010 | .NET 4.0 | C# 4.0 |
|
2012 | .NET 4.5 | C# 5.0 |
|
2015 | .NET 4.6 | C# 6.0 |
|
? | .NET 5.0, .NET Core 1.0 | C# 7.0 |
Einige geplante Features:
|
Integrierte Entwicklungsumgebungen (IDEs)
Neben der dominierenden Entwicklungsplattform Microsoft Visual Studio (Windows, proprietäre Software; Code auch für OS X und GNU/Linux) gibt es inzwischen auch andere Entwicklungsumgebungen (IDEs) C#:
- Baltie (Windows, proprietär) speziell für Kinder
- JetBrains bietet mit ReShaper (Windows, proprietär) eine Reihe von Plugins für Visual Studio an, welche dieses verbessern sollen
- MonoDevelop (GNU/Linux; FLOSS)
- Morfik CX (Windows; proprietär)
- Notepad++ (Windows; FLOSS) mit dem Plugin CS-Script (FLOSS) ermöglicht Autovervollständigung, Codeausführung und Debugging
- das OmniSharp-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)
- SharpDevelop (Windows; FLOSS)
- Xamarin Studio (Windows und OS X)
- Rider (plattformunabhängig) Entwicklungsumgebung von JetBrains, basierend auf ReSharper, noch im Entwicklungsstadium
Compiler
Es existieren drei Compiler für C#:
- der von Microsoft für die neuesten Versionen von C# und Visual Basic entwickelte Roslyn-Compiler (Windows; FLOSS)[7] als neuste Iteration der .NET Compiler Platform (deren ältere Versionen proprietäre Software waren)
- der von Xamarin Compiler für Mono (Windows, OS X, GNU/Linux; FLOSS)
- der eingestellte DotGNU (FLOSS)
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 leitet sich vom Zeichen Kreuz (♯, englisch sharp) der Notenschrift ab,[8] was dort für eine Erhöhung um einen Halbton steht. 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.[9] Allerdings enthält der Name nicht das Kreuz-Zeichen der Musiknotation, sondern ein Doppelkreuz bzw. Raute,[10] das häufig als Ersatzzeichen für das Kreuz genutzt wird, weil es im Gegensatz zum Kreuz auf üblichen Tastaturen vorkommt.
In künstlerischen Darstellungen wird teilweise auch das Notenschriftzeichen verwendet, was in der Folge von einigen für korrekt gehalten wird.[11] Eindeutig falsch ist die zweifache Verwendung des doppelten Dagger-Zeichens.
Sprachelemente
C#-Syntaxbeispiel für ein einfaches Kommandozeilen-Programm:
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo Welt!");
}
}
Einfache MessageBox in C#
using System;
using System.Windows.Forms;
class Program
{
public static void Main()
{
MessageBox.Show("Text", "Titel", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
}
FileStream-Beispiel in C#
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..
}
}
}
Networking-Beispiel in C#
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Console;
class Program
{
public static void Main()
{
const string textToSend = "Hallo Welt"; // Daten, die gesendet werden
const string localhost = "127.0.0.1"; // Endpunkt, zu dem verbunden wird
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))
{
socket.Connect(ipEndPoint); // Es wird zum Endpunkt verbunden
var byteCount = socket.Send(data, SocketFlags.None); // Daten werden gesendet
WriteLine("Es wurden {0} bytes gesendet", byteCount);
var buffer = new byte[256]; // Puffer für die zu empfangenen Daten
byteCount = socket.Receive(buffer, SocketFlags.None); // Daten werden empfangen
// 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.
}
}
}
Sprachderivate
- Cω
- eXtensible C# (XC#)
- Metaphor
- MMC#[12]
- Multiprocessor C# (MC#)
- Polyphonic C#
- Sing#
- Spec#
- Vala für Programme des Gnome-Projektes
Siehe auch
Literatur
- 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. 1136 (Inhaltsverzeichnis, Inhaltstext [PDF] Englisch).
- 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. 232 (Inhaltsverzeichnis, Inhaltstext – Englisch).
- Walter Doberenz; Thomas Gewinnus: Visual C# 2015. Grundlagen, Profiwissen und Rezepte. Hanser, München 2015, ISBN 978-3-446-44381-5, S. 1195 (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, S. 1209 (Inhaltsverzeichnis, Inhaltstext).
- Jay Hilyard; Stephen Teilhet: C# 6.0 Cookbook. Solutions for C# Developers. 4. Auflage. O'Reilly, Sebastopol 2015, ISBN 978-1-4919-2146-3, S. 704 (Inhaltsverzeichnis, Inhaltstext [PDF] Englisch).
- Andreas Kühnel: C# 6 mit Visual Studio 2015. Das umfassende Handbuch. 7., aktualisierte und erweiterte Auflage. Rheinwerk, Bonn 2016, ISBN 978-3-8362-3714-7, S. 1482 (Inhaltsverzeichnis, Inhaltstext).
- Mark Michaelis; Eric Lippert: Essential C# 6.0. 5. Auflage. Addison-Wesley, New York u.a. 2015, ISBN 978-0-13-414104-6, S. 1005 (Inhaltstext – Englisch).
- Hanspeter Mössenböck: Kompaktkurs C# 6.0. dpunkt, Heidelberg 2016, ISBN 978-3-86490-377-9, S. 330 (Inhaltsverzeichnis, Inhaltstext [PDF]).
- John Sharp: Microsoft Visual C# Step by Step. 8. Auflage. Microsoft, Redmond 2015, ISBN 978-1-5093-0104-1, S. 816 (Inhaltsverzeichnis, Inhaltstext [PDF] Englisch).
- 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, S. 553 (Inhaltsverzeichnis, Inhaltstext).
- Bernhard Wurm: Schrödinger programmiert C#. Das etwas andere Fachbuch. Rheinwerk, Bonn 2015, ISBN 978-3-8362-2381-2, S. 760 (Inhaltsverzeichnis, Inhaltstext).
Weblinks
- Visual C# im MSDN
- C# beim Mono-Projekt
- C#-Grundlagen für Anfänger in der Microsoft Virtual Academy (deutscher Text, englisches Video und Audio)
- C# Tutorial von Derek Banas auf YouTube (englisches Video und Audio)
- Einführung in das Programmieren mit C# 4.0 vom Zentrum für Informations-, Medien- und Kommunikationstechnologie der Universität Trier (veraltete Version von C#)
- Linkkatalog zum Thema C-Sharp bei curlie.org (ehemals DMOZ)
Einzelnachweise
- ↑ Java 5 catches up with C#
- ↑ 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.
- ↑ https://msdn.microsoft.com/en-us/library/hh156499.aspx
- ↑ https://msdn.microsoft.com/en-us/library/ms228593.aspx
- ↑ http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
- ↑ http://standards.iso.org/ittf/PubliclyAvailableStandards/c042926_ISO_IEC_23270_2006(E).zip
- ↑ https://github.com/dotnet/roslyn
- ↑ James Kovacs: C#/.NET History Lesson. 7. September 2007, abgerufen am 25. März 2015 (englisch).
- ↑ Naomi Hamilton: The A-Z of Programming Languages: C#. Interview mit Anders Hejlsberg. 1. Oktober 2008, abgerufen am 23. März 2015 (englisch).
- ↑ Standard ECMA-334 „C# Language Specification“. (PDF; 5,60 MiB) Kapitel 6 „Acronyms and abbreviations“. Ecma International, Juni 2006, abgerufen am 23. März 2015 (englisch).
- ↑ Vorwort des Buches C# mit Methode, Christian Bleske (Hrsg.), Alexander Mayer, Michael Fischer, Michael Starke, Michael Steil (PDF)
- ↑ [1],O.Lampl;L.Böszörmenyi; Adaptive quality-aware programming with declarative QoS constraints