Definition „C-Sharp“

Was ist C#?

| Autor / Redakteur: Pyrocco / Stephan Augsten

Als .NET-orientierte Programmiersprache ist C# ist eng mit Microsoft-Lösungen integriert, beispielsweise Visual Studio Code.
Als .NET-orientierte Programmiersprache ist C# ist eng mit Microsoft-Lösungen integriert, beispielsweise Visual Studio Code. (Bild: Microsoft)

C# ist eine moderne, objektorientierte und typsichere Programmiersprache. Sie integriert sich in .NET-Plattformen, die Cross-Development für Anwendungen für Windows, macOS, iOS, Android und Linux ermöglichen.

C# wurde Anfang der 2000er Jahre als systemeigene Programmiersprache für Microsofts .NET-Plattformen entwickelt. Die .NET-Plattformen bieten Programmiersprachen, Werkzeuge und Technologien zur Entwicklung und Ausführung von Softwareanwendungen.

Microsoft definiert mit der Common Language Specification (CLS) einen Sprachumfang, den alle .NET-Programmiersprachen erfüllen müssen. C# erfüllt die CLS. In der Spezifikation wird eine Mindestmenge von Typen und Klassenbibliotheken aufgeführt, deren Verfügbarkeit der Compiler erwartet.

CLS-konformer Programmiercode verschiedener Sprachen lässt sich dabei mischen. Entwickler können einen Teil einer Anwendung in C# und einen anderen Teil in einer anderen .NET-Sprache (z.B. Visual Basic .NET) schreiben. Die Entwicklungsumgebung, die Bibliotheken und das objektorientierte Entwicklungsmodell werden dabei beibehalten.

Entwicklungsumgebung Visual Studio

Mit Visual Studio stellt Microsoft eine integrierte Entwicklungsumgebung (IDE) zur Verfügung, mit der .NET-Anwendungen in CLS-Sprachen entwickelt werden können. Visual Studio unterstützt Entwicklung von Desktop-, mobilen und Webanwendungen in Visual Basic, C, C++, C#, Python, JavaScript u.a.

.NET Framework

.NET-Anwendungen gründen auf den Programmierschnittstellen des .NET Frameworks. Dieses Framework stellt die Klassenbibliotheken, den Compiler und die Laufzeitumgebung zur Ausführung von .NET-Anwendungen zur Verfügung.

Der geschriebene Quellcode wird in einen Zwischencode, die Common Intermediate Language (CIL), übersetzt. Jedes Betriebssystem mit .NET-Unterstützung hat seine eigene .NET-Laufzeitumgebung namens Common Language Runtime (CLR). Die CLR verwaltet den Speicher, verarbeitet Objektreferenzen und führt die Just-In-Time-Kompilierung (JIT) des CIL-Codes durch.

Die CLR ist damit eine virtuelle Maschine, d.h. ein System, das Programme auf einem Betriebssystem zum Laufen bringt, die nicht nativ auf diesem laufen würden. Die CLR sorgt dafür, dass ein und derselbe Code auf unterschiedlichen Betriebssystemen ausgeführt werden kann.

Durch die CLR ist die Ausführung von C#-Programmen auch sicherer als von Programmen, die den Speicher selbst verwalten müssen. Daher wird auf .NET-Basis entwickelter Code als verwalteter („managed“) Code bezeichnet.

Spracheigenschaften

C# ist eine universelle, objektorientierte Programmiersprache, die ursprünglich entwickelt wurde, um die Entwicklung von Windows-Anwendungen zu vereinfachen. Die Ähnlichkeiten zwischen C# und der C-Sprachfamilie sowie Java sollen Entwicklern mit einem Hintergrund in objektorientierten Sprachen den Einstieg erleichtern. Zudem wurden moderne Eigenschaften der Sprache Java eingebracht, wie Portabilität und automatische Speicherverwaltung (Garbage Collection).

Durch das .NET Framework verfügt C# ähnlich wie Java über eine umfangreiche Klassenbibliothek, die beispielsweise Verschlüsselung, TCP/IP-Socket-Programmierung und die Erstellung grafischer Oberflächen unterstützt. Ausnahmebehandlung (Exception Handling), verschiedene Arten von Polymorphismus und die Trennung von Schnittstellen und Implementierung sind weitere Eigenschaften von C#.

Polymorphismus

Im Gegensatz zu C++ unterstützt C# keine Mehrfachvererbung. Eine Klasse kann aber beliebig viele Schnittstellen implementieren. Auch dies reduziert Fehlerquellen und vereinfacht die architektonischen Anforderungen an das .NET Framework.

Zeiger

C# rät auch von der expliziten Verwendung von Zeigern ab. Die Sprache nimmt hierbei eine Zwischenstellung zwischen C++ und Java ein, das keine Zeiger vorsieht. Deren Nutzung kann bei Programmierfehlern leicht den Systemspeicher korrumpieren und zu Abstürzen führen.

In C# können Zeiger nur in Blöcken verwendet werden, die explizit als unsicher gekennzeichnet sind. Programme mit unsicherem Code benötigen zum Ausführen entsprechende Berechtigungen. Objektzugriff erfolgt meistens über sichere Objektreferenzen, die entweder immer auf ein „lebendes“ Objekt verweisen oder den genau definierten Nullwert haben. Es ist unmöglich, einen Verweis auf ein nicht existentes Objekt oder auf einen zufälligen Speicherblock zu erhalten.

C# ist eine Sprache mit strenger Typisierung, um Fehler durch Typkonvertierung zu vermeiden. Array-Grenzen werden automatisch geprüft. Variablen müssen initialisiert werden. Durch automatische sog. Garbage Collection, die nicht mehr genutzten Speicher freigibt, wird der Programmierer von der Verantwortung für Speicherfreigabe befreit.

Cross-Development mit .NET Core und Mono

Microsofts in Aufbau befindliche .NET Core-Plattform macht .NET-Programm neben Windows auch auf MacOS und verschiedenen Linux-Distributionen nutzbar. .NET Core ist ein Open Source-Modernisierungsprojekt zentraler Komponenten des .NET Frameworks. Ziel ist vereinfachte Anwendungsentwicklung, verbesserte Modularität und größere Plattformunabhängigkeit.

Mono ermöglicht als alternative Open Source-Implementierung des .NET Frameworks die Entwicklung plattformunabhängiger Software auf Basis der Common Language-Infrastruktur und C#. Mit Mono laufen Programm, die für die .NET-Umgebung erstellt wurden, auch auf macOS, iOS, Android und Linux.

Ende 2020 sollen .NET Framework, .NET Core und Mono unter der Bezeichnung .NET 5.0 zu einer einheitlichen Plattform zusammengeführt werden.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Aktuelle Beiträge zu diesem Thema

Buildspec.yml für CodeBuild erstellen

ASP.NET-Apps auf AWS Elastic Beanstalk migrieren, Teil 3

Buildspec.yml für CodeBuild erstellen

Wer seine ASP.NET-Anwendungen auf AWS migrieren möchte, muss zunächst ein Quellcode-Repository auf CodeCommit einrichten. Die Vorbereitung der Build-Umgebung ist der nächste Schritt, den wir heute in Angriff nehmen. lesen

Im Eiltempo zur Single Page Web Application

Wisej auf der BASTA!

Im Eiltempo zur Single Page Web Application

Web-basierte Anwendungen ersetzen zunehmend klassische Desktop-Applikationen. Doch wie migriert man bestehende Software-Lösungen auf native Web-Anwendungen? Im Rahmen der BASTA! widmet sich die Ice Tea Group diesem Thema. lesen

Was ist eine Cross-Platform App?

Definition „Plattformübergreifende App

Was ist eine Cross-Platform App?

Eine Cross-Platform App ist eine Anwendung, die auf verschiedenen Plattformen lauffähig ist. Tools und Frameworks für plattformübergreifendes Development helfen Entwicklern dabei, solche Anwendungen mit geringem Aufwand zu erstellen. lesen

Microsoft über neue Funktionen der Visual Studio IDE

Zweite Preview von Visual Studio 2019 16.5

Microsoft über neue Funktionen der Visual Studio IDE

Mit der zweiten Preview der „Visual Studio 2019“-Version 16.5 hat Microsoft die Integration von CMake und Xamarin in die Entwicklungsumgebung verbessert. Darüber hinaus wurde die Azure Functions Runtime auf Version 3.0 angehoben. lesen

6 Gründe für Modernisierung von Legacy-Software

Avision beklagt vorschnelle Trennung von Altanwendungen

6 Gründe für Modernisierung von Legacy-Software

In Zeiten von Cloud Native und Microservices entscheiden sich viele Unternehmen, ihre Legacy-Anwendungen durch Neuentwicklungen zu ersetzen. Avision kennt aber gute Gründe dafür, warum Unternehmen ihren Altanwendungen unter Umständen treu bleiben sollten. lesen

7 Open Source Tools für Developer

Entwickeln, Berichte erstellen und Daten abfragen

7 Open Source Tools für Developer

Open-Source-Tools bieten in der Entwicklung einige Vorteile. Für die Developer Community sind sie in der Regel kostenlos, ihr Code ist frei zugänglich und neue Versionen erscheinen in kurzem Zeitabstand. lesen

Code-Review und App-Optimierung unter AWS

Amazon CodeGuru automatisiert Source Code Testing

Code-Review und App-Optimierung unter AWS

Amazon Web Services (AWS) hat mit CodeGuru ein neues Werkzeug für Code-Review vorgestellt. Es ergänzt die bestehenden Tools CodeBuild, CodeCommit, CodeDeploy oder kundeneigene Tools wie Jenkins für den CI/CD-Prozess. Zusätzlich gibt es Tipps für die Optimierung der Performance einer Applikation. lesen

Microsoft Edge nutzt Chromium Engine

Browser-Aktualisierung über Windows Update

Microsoft Edge nutzt Chromium Engine

Zum Januar-Patchday 2020 hat Microsoft die Engine des Edge-Browsers offiziell von EdgeHTML auf Chromium umgestellt. Unternehmen können die automatische Aktualisierung bei Bedarf blockieren. lesen

Bash-Bedingungen im Detail

Strings und Arithmetik, Variablen und Globs

Bash-Bedingungen im Detail

„Was wäre, wenn?“ Das ist die grundlegende Frage für jegliche Entwicklung. Was wäre, wenn der Nutzer das Kästchen anklickt? Was wäre, wenn a einen Wert zwischen 4 und 10 hat? Was, wenn Datei XY existiert? Was, wenn String 1 in String 2 vorkommt? Und was wäre, wenn intuitiv verständlich wäre, wo die Unterschiede zwischen [[]], [], (()) und test liegen? lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 46022456 / Definitionen)