Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie einen neuen Job beginnen oder einem Team beitreten, das C# verwendet, hilft Ihnen dieser Artikel, schnell produktiv zu werden. Es hebt hervor, was aus Java vertraut ist und was in C# neu ist.
C# und Java haben viele Ähnlichkeiten. Wenn Sie sich mit C# vertraut machen, können Sie einen Großteil der Kenntnisse anwenden, die Sie sich bereits im Zusammenhang mit dem Programmieren in Java angeeignet haben:
-
Ähnliche Syntax: Sowohl Java als auch C# gehören zur C-Sprachfamilie. Diese Ähnlichkeit bedeutet, dass Sie C# bereits lesen und verstehen können. Es gibt einige Unterschiede, aber ein Großteil der Syntax ist identisch mit Java und C. Die geschweiften Klammern und Semikolons sind Ihnen bereits bekannt. Steuerelementanweisungen wie
if,elseundswitchsind identisch. Die Schleifenanweisungenfor,while, unddo...whilesind identisch. In beiden Sprachen sind dieselben Schlüsselwörter fürclassundinterfaceverfügbar. Die Zugriffsmodifizierer vonpubliczuprivatesind identisch. Selbst viele der integrierten Typen verwenden dieselben Schlüsselwörter:int, ,stringunddouble. - Objektorientiertes Paradigma: Sowohl Java als auch C# sind objektorientierte Sprachen. Die Konzepte von Polymorphie, Abstraktion und Kapselung finden in beiden Sprachen Anwendung. Bei beiden wurden neue Konstrukte hinzugefügt, aber die wichtigsten Features sind weiterhin relevant.
- Stark typisiert: Sowohl Java als auch C# sind stark typisierte Sprachen. Sie deklarieren den Datentyp von Variablen (entweder explizit oder implizit). Der Compiler erzwingt die Typsicherheit. Er ermittelt typbezogene Fehler in Ihrem Code, bevor Sie den Code ausführen.
- Plattformübergreifend: Sowohl Java als auch C# sind plattformübergreifende Sprachen. Sie können Ihre Entwicklungstools auf Ihrer bevorzugten Plattform ausführen. Ihre Anwendung kann auf mehreren Plattformen ausgeführt werden. Ihre Entwicklungsplattform muss nicht mit der Zielplattform übereinstimmen.
-
Ausnahmebehandlung: Sowohl Java als auch C# lösen Ausnahmen aus, um Fehler anzuzeigen. Beide verwenden
try-catch-finally-Blöcke zum Behandeln von Ausnahmen. Die Exception-Klassen weisen ähnliche Namen und Vererbungshierarchien auf. Ein Unterschied besteht darin, dass das Konzept der überprüften Ausnahmen in C# keine Anwendung findet. Jede Methode kann (theoretisch) eine Ausnahme auslösen. - Standardbibliotheken: Die .NET-Runtime und die Java Standard Library (JSL) unterstützen allgemeine Aufgaben. Beide verfügen über umfangreiche Ökosysteme für andere Open-Source-Pakete. In C# ist NuGet der Paket-Manager. Dies ist analog zu Maven.
-
Automatische Speicherbereinigung: Beide Sprachen ermöglichen die automatische Speicherverwaltung über die automatische Speicherbereinigung (Garbage Collection, GC). Die Runtime fordert den Speicher von Objekten zurück, auf die nicht verwiesen wird. Ein Unterschied besteht darin, dass C# es Ihnen ermöglicht, Werttypen als
struct-Typen zu erstellen.
Syntax auf einen Blick
Die folgenden Beispiele zeigen einige gängige Muster nebeneinander. Diese Vergleiche sind nicht vollständig, aber sie geben Ihnen ein schnelles Gefühl für die Syntaxunterschiede.
Variablendeklaration und Typinferenz:
// Java
var name = "Hello";
final int count = 5;
// C#
var name = "Hello";
const int count = 5;
Zeichenfolgeninterpolation:
// Java
var message = "Hello, " + name + "! Count: " + count;
// C#
var message = $"Hello, {name}! Count: {count}";
Weitere Informationen: Zeichenfolgeninterpolation
Lambda-Ausdrücke:
// Java
list.stream().filter(x -> x > 5).collect(Collectors.toList());
// C#
var result = list.Where(x => x > 5).ToList();
Weitere Informationen: LINQ-Übersicht
Nullbehandlung:
// Java
String value = optional.orElse("default");
// C#
string value = input ?? "default";
Weitere Informationen: Nullable Referenztypen
Was ist vertraut?
Sie können in C# fast sofort aufgrund der Ähnlichkeiten produktiv arbeiten. Lernen Sie während des Fortschritts Features und Idiome in C# kennen, die in Java nicht verfügbar sind:
-
Musterabgleich: Der Musterabgleich ermöglicht präzise bedingte Anweisungen und Ausdrücke basierend auf der Form komplexer Datenstrukturen. Mit der
is-Anweisung wird überprüft, ob eine Variable einem Muster entspricht. Der musterbasierteswitch-Ausdruck bietet eine umfangreiche Syntax, um eine Variable zu prüfen und Entscheidungen basierend auf ihren Merkmalen zu treffen. - Zeichenfolgeninterpolation und Rohzeichenfolgenliterale: Mit der Zeichenfolgeninterpolation können Sie ausgewertete Ausdrücke in eine Zeichenfolge einfügen, anstatt Positionsbezeichner zu verwenden. Roh-String-Literale bieten eine Möglichkeit, Escape-Sequenzen im Text zu minimieren.
-
Nullable- und Non-Nullable-Typen: C# unterstützt Nullable-Werttypen und Nullable-Verweistypen, indem das
?-Suffix an einen Typ angefügt wird. Bei Nullable-Typen warnt Sie der Compiler, wenn Sie den Nullable-Typ nicht aufnullüberprüfen, bevor Sie den Ausdruck dereferenzieren. Bei Non-Nullable-Typen werden Sie vom Compiler gewarnt, wenn Sie dieser Variablen möglicherweise einennull-Wert zuweisen. Nicht-nullbare Verweistypen minimieren Programmierfehler, die einen System.NullReferenceException-Fehler verursachen. - Erweiterungen: In C# können Sie Member erstellen, die eine Klasse oder Schnittstelle erweitern . Erweiterungen bieten ein neues Verhalten für einen Typ aus einer Bibliothek oder für alle Typen, die eine bestimmte Schnittstelle implementieren.
- LINQ: Language Integrated Query (LINQ) bietet eine allgemeine Syntax zum Abfragen und Transformieren von Daten (unabhängig vom Speicher).
- Lokale Funktionen: In C# können Sie Funktionen innerhalb von Methoden oder anderen lokalen Funktionen schachteln. Lokale Funktionen bieten noch eine weitere Kapselungsebene.
Tipp
Weitere Informationen zum Typsystem von C#, einschließlich struct vs. classDatensätzen und Schnittstellen, finden Sie in der Übersicht über das Typsystem im Abschnitt "Grundlagen".
In C# gibt es weitere Features, die in Java nicht verfügbar sind. Funktionen wie async und await modellieren asynchrone Operationen in sequenzieller Syntax. Die using Anweisung gibt automatisch nicht speicherbezogene Ressourcen frei.
Bei C# und Java gibt es einige ähnliche Features, die sich zwar nur leicht, aber dafür in wichtigen Punkten unterscheiden:
-
Eigenschaften und Indexer: Eigenschaften und Indexer (Behandeln einer Klasse als Array oder Wörterbuch) bieten Sprachunterstützung. In Java handelt es sich dabei um Namenskonventionen für Methoden, die mit
getundsetbeginnen. -
Datensätze: In C# können Datensätze entweder
class-Typen (Verweis) oderstruct-Typen (Wert) sein. C#-Datensätze können unveränderlich sein, müssen jedoch nicht unveränderlich sein. - Tupel weisen in C# und Java eine unterschiedliche Syntax auf.
- Attribute ähneln Java-Anmerkungen.
Schließlich gibt es Java-Sprachfeatures, die in C# nicht verfügbar sind:
- Überprüfte Ausnahmen: In C# kann jede Methode theoretisch jede Ausnahme auslösen.
- Überprüfte Arraykovarianz: In C# sind Arrays nicht sicher kovariant. Sie sollten die generischen Sammlungsklassen und Schnittstellen verwenden, wenn Sie kovariante Strukturen benötigen.
Insgesamt sollten sich erfahrene Java-Entwickler schnell mit C# zurechtfinden. C# hat genug vertraute Idiome, damit Sie produktiv sein können, wenn Sie die neuen Idiome lernen.
Nächste Schritte
- Eine Tour durch C#: Erhalten Sie einen allgemeinen Überblick über alle C#-Features.
- Lernprogramme für Anfänger: Lernen Sie C# Schritt für Schritt mit interaktiven Lektionen.
- Was Sie mit C# erstellen können: Erkunden Sie die Anwendungstypen, die Sie mit C# erstellen können.
- C#-Grundlagen: Tauchen Sie tiefer in das Typsystem, die objektorientierte Programmierung und vieles mehr ein.