„C-Sharp“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
MovGP0 (Diskussion | Beiträge) →C#-Versionen: + neue Funktionen der C# CTP (Roslyn) |
MovGP0 (Diskussion | Beiträge) →Sprachelemente: updated code examples |
||
Zeile 160: | Zeile 160: | ||
<syntaxhighlight lang="csharp"> |
<syntaxhighlight lang="csharp"> |
||
using System.Console; // ab C# 6 |
|||
⚫ | |||
⚫ | |||
{ |
{ |
||
public static void Main() |
public static void Main() |
||
{ |
{ |
||
WriteLine("Hallo Welt!"); |
|||
} |
} |
||
} |
} |
||
Zeile 175: | Zeile 177: | ||
using System.Windows.Forms; |
using System.Windows.Forms; |
||
class Program |
private class Program |
||
{ |
{ |
||
public static void Main() |
public static void Main() |
||
Zeile 191: | Zeile 193: | ||
using System.Text; |
using System.Text; |
||
class Program |
private class Program |
||
{ |
{ |
||
public static void Main() |
public static void Main() |
||
{ |
{ |
||
//Text, der in die Datei geschrieben wird |
//Text, der in die Datei geschrieben wird |
||
string |
const string textToWrite = "Hallo Welt"; |
||
string |
const string fileName = "dateiname.txt"; |
||
//Datei "dateiname.txt" wird erstellt oder überschrieben |
//Datei "dateiname.txt" wird erstellt oder überschrieben |
||
using ( |
using (var stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) |
||
{ |
{ |
||
//Der Text wird UTF8-kodiert in die Datei geschrieben |
//Der Text wird UTF8-kodiert in die Datei geschrieben |
||
var data = Encoding.UTF8.GetBytes(textToWrite); |
|||
stream.Write(data, 0, data.Length); |
|||
//Datei wird geschlossen.. |
//Datei wird geschlossen.. |
||
} |
} |
||
Zeile 214: | Zeile 216: | ||
<syntaxhighlight lang="csharp"> |
<syntaxhighlight lang="csharp"> |
||
using System; |
using System.Console; |
||
using System.Text; |
using System.Text; |
||
using System.Net; |
using System.Net; |
||
using System.Net.Sockets; |
using System.Net.Sockets; |
||
class Program |
private class Program |
||
{ |
{ |
||
public static void Main() |
public static void Main() |
||
{ |
{ |
||
string textToSend = "Hallo Welt"; // Daten, die gesendet werden |
const string textToSend = "Hallo Welt"; // Daten, die gesendet werden |
||
string localhost = "127.0.0.1"; // Endpunkt, zu dem verbunden wird |
const string localhost = "127.0.0.1"; // Endpunkt, zu dem verbunden wird |
||
int port = 80; |
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 |
// Socket, das verwendet wird |
||
using( |
using(var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) |
||
{ |
{ |
||
socket.Connect(ipEndPoint); // Es wird zum Endpunkt verbunden |
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 |
byteCount = socket.Receive(buffer, SocketFlags.None); // Daten werden empfangen |
||
Zeile 243: | Zeile 245: | ||
if(byteCount > 0) |
if(byteCount > 0) |
||
{ |
{ |
||
WriteLine("Es wurden {0} Bytes empfangen", byteCount); |
|||
var answer = Encoding.UTF8.GetString(buffer); |
|||
WriteLine("Empfangene Daten: {0}", answer); |
|||
} |
} |
||
Version vom 4. April 2014, 21:00 Uhr
C# | |
---|---|
![]() | |
Basisdaten | |
Paradigmen: | multiparadigmatisch: strukturiert, imperativ, deklarativ, objektorientiert |
Erscheinungsjahr: | 2001 |
Designer: | Microsoft, Anders Hejlsberg, Mads Torgersen |
Entwickler: | Microsoft |
Aktuelle Version: | 5.0 (15. August 2012) |
Typisierung: | statisch, stark, explizit (optional: dynamisch, duck, implizit) |
Beeinflusst von: | C, C++, Object Pascal, Haskell, Java, Modula-3, Visual Basic |
Beeinflusste: | Java,[1] Vala, Cω |
Betriebssystem: | alle, für die eine CLI-Implementierung existiert (z. B. Microsofts CLR des .NET-Frameworks oder Xamarins Mono) |
docs.microsoft.com/en-us/dotnet/csharp/ |
C# (lies englisch c sharp, englische Aussprache [ ]) ist eine vom Softwarehersteller Microsoft im Rahmen seiner .NET-Strategie entwickelte Programmiersprache. C# ist bei ECMA[2] und ISO als Standard registriert.
Die aktuelle Version C# 5.0 wurde im Jahr 2012 gleichzeitig mit dem Microsoft .NET Framework 4.5 veröffentlicht.
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 Delegaten 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 aufgelöst 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.
C#-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 |
|
2014 | C# 6.0 (CTP) |
|
Verfügbarkeit von integrierten Entwicklungsumgebungen
Neben der von Microsoft vertriebenen Entwicklungsplattform Microsoft Visual Studio sowie der in ihrem Funktionsumfang eingeschränkten, kostenlosen Version Microsoft Visual Studio C# Express gibt es inzwischen auch Entwicklungsumgebungen (IDEs) anderer Hersteller für C#:
- Baltie, C#-IDE für Kinder
- C#-Builder von Borland (Verwendet den Microsoft C#-Compiler in Lizenz)
- MonoDevelop – IDE für Windows und Unix-basierte Betriebssysteme (Open-Source)
- SharpDevelop – (Open-Source)
- XNA Game Studio – IDE von Microsoft zur Spieleentwicklung
Compiler
- Das Open-Source-Projekt dotGNU entwickelte eine freie .NET-Version inklusive C#-Compiler und Unterstützung für Windows Forms, wurde inzwischen allerdings eingestellt.
- Das Open-Source-Projekt Mono entwickelt eine freie und plattformunabhängige .NET-Version inklusive C#-Compiler.
Namensgebung
C♯ ist ursprünglich ein Symbol für den in der Musik durch ein Kreuz (♯) um einen Halbton erhöhten Ton C, das Cis – englisch C sharp. Da das Kreuz allerdings auf keiner Standardtastatur direkt eingegeben werden kann, wird bei der Schreibung des Namens in der Regel das typographisch ähnliche Doppelkreuz # als Ersatzdarstellung gewählt.[3]
Sprachelemente
C#-Syntaxbeispiel für ein einfaches Kommandozeilen-Programm:
using System.Console; // ab C# 6
private class Program
{
public static void Main()
{
WriteLine("Hallo Welt!");
}
}
Einfache MessageBox in C#
using System;
using System.Windows.Forms;
private 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;
private 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.Console;
using System.Text;
using System.Net;
using System.Net.Sockets;
private 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#[4]
- Multiprocessor C# (MC#)
- Polyphonic C#
- Sing#
- Spec#
- Vala für Programme des Gnome-Projektes
Siehe auch
Literatur
- Frank Eller: Visual C# 2008. Addison-Wesley 2008, ISBN 978-3-8273-2641-6.
- Golo Roden: Auf der Fährte von C#. Springer-Verlag, 2008, ISBN 978-3-540-27888-7 (Volltext online unter guide to C#).
- Andreas Kühnel: Visual C#. Galileo Computing, 2010, ISBN 978-3-8362-1552-7 (Volltext online).
- Daniel Moses, Johannes Nowak: C# Programmieren unter .NET. Franzis Verlag GmbH, 2002, ISBN 3-7723-7224-4.
- Dirk Louis, Shinja Strasser: Microsoft Visual C# 2008 – Das Entwicklerbuch. Microsoft Press, 2008, ISBN 978-3-86645-507-8.
- Klaus Fahnenstich, Rainer G. Haselier: Richtig einsteigen: Programmieren lernen mit Visual C# 2008. Microsoft Press, ISBN 978-3-86645-207-7.
- Jürgen Bayer: C# Codebook. Addison-Wesley Verlag, 2009, ISBN 3-8273-2576-5
Weblinks
- Visual C# Resources von Microsoft
- Linkkatalog zum Thema C-Sharp bei curlie.org (ehemals DMOZ)
- Joseph Albahari: Threading in C#. 27. April 2011, abgerufen am 3. April 2013 (englisch, Ausführliche Anleitung zum Umgang mit Threads in C#).
- Tomáš Petříček: Async in C# and F#: Asynchronous gotchas in C#. 15. April 2013, abgerufen am 16. April 2013 (englisch, häufige Fehler bei der Verwendung von async).
Einzelnachweise
- ↑ Java 5 catches up with C#
- ↑ ECMA-Spezifikation der Sprache
- ↑ 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