Freigeben über


Roadmap für Python-Entwickler, die C# lernen

Wenn Sie für eine neue Rolle oder ein neues Projekt von Python zu C# wechseln, hilft Ihnen dieser Artikel, schnell produktiv zu werden. Es hebt hervor, was aus Python vertraut ist und was in C# anders ist.

Bei C# und Python werden ähnliche Konzepte verwendet. Diese bekannten Konstrukte helfen Ihnen, C# zu erlernen, wenn Sie bereits mit Python vertraut sind.

  1. Objektorientiert: Sowohl Python als auch C# sind objektorientierte Sprachen. Alle Konzepte für Klassen in Python gelten in C#, auch wenn die Syntax unterschiedlich ist.
  2. Plattformübergreifend: Sowohl Python als auch C# sind plattformübergreifende Sprachen. Apps, die in einer der Sprachen geschrieben wurden, können auf vielen Plattformen ausgeführt werden.
  3. 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.
  4. Stark typisiert: Sowohl Python als auch C# sind stark typisierte Sprachen. Die Typumwandlung findet nicht implizit statt. Die Unterschiede werden später beschrieben (C# ist statisch typisiert, Python hingegen dynamisch).
  5. „async“ und „await“: Die Python-Features async und await sind direkt von der async- und await-Unterstützung von C# inspiriert.
  6. Der match-Ausdruck und der Musterabgleich in Python ähneln dem Musterabgleich im -Ausdruck von C#. Sie verwenden diese, um einen komplexen Datenausdruck zu untersuchen und festzustellen, ob er einem Muster entspricht.
  7. Schlüsselwörter für Anweisungen: Python und C# haben viele Schlüsselwörter gemeinsam (z. B. if, else, while und for). Obwohl nicht die gesamte Syntax identisch ist, gibt es genügend Gemeinsamkeiten, sodass Sie die C# lesen können, wenn Sie Erfahrung in der Verwendung von Python haben.

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.

Typanmerkungen:

# Python
name: str = "Hello"
count: int = 5
// C#
string name = "Hello";
int count = 5;

Listenfilterung (Verständnis vs. LINQ):

# Python
result = [x for x in items if x > 5]
// C#
var result = items.Where(x => x > 5).ToList();

Weitere Informationen: LINQ-Übersicht

Block-Scope (Einzug vs. geschweifte Klammern):

# Python
if count > 0:
    print("positive")
// C#
if (count > 0)
{
    Console.WriteLine("positive");
}

Klassendefinition:

# Python
class Point:
    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y
// C#
record Point(int X, int Y);

Weitere Informationen: Datensätze

Wichtige Unterschiede

Während Sie C# lernen, entdecken Sie diese wichtigen Konzepte, bei denen C# sich von Python unterscheidet:

  1. Einrückung im Vergleich zu Tokens: In Python sind Zeilenumbrüche und Einrückungen erstklassige syntaktische Elemente. In C# sind Leerzeichen nicht signifikant. Tokens wie ; trennen Anweisungen, und andere Tokens wie { und } steuern den Blockbereich für if und andere Blockanweisungen. Aus Gründen der Lesbarkeit werden bei den meisten Programmierstilen (einschließlich des in dieser Dokumentation verwendeten Stils) Einrückungen verwendet, um die durch { und } deklarierten Blockbereiche zu verstärken.
  2. Statische Typisierung: In C# enthält eine Variablendeklaration ihren Typ. Durch das erneute Zuweisen einer Variablen zu einem Objekt eines anderen Typs wird ein Compilerfehler generiert. In Python kann sich der Typ bei der Neuzuweisung ändern.
  3. Nullable-Typen: C#-Variablen können Nullable- oder Non-Nullable-Typen sein. Ein Non-Nullable-Typ ist ein Typ, der nicht NULL (oder nichts) sein kann. Er bezieht sich immer auf ein gültiges Objekt. Im Gegensatz dazu kann ein Nullable-Typ entweder auf ein gültiges Objekt oder NULL verweisen.
  4. LINQ: Die Schlüsselwörter des Abfrageausdrucks, aus denen LINQ (Language Integrated Query) besteht, sind in Python keine Schlüsselwörter. Python-Bibliotheken wie itertools, more-itertools und py-linq bieten jedoch ähnliche Funktionen.
  5. Generics: C#-Generics verwenden die statische C#-Typisierung, um Assertionen zu den Argumenten zu erstellen, die für Typparameter bereitgestellt werden. Ein generischer Algorithmus muss möglicherweise Einschränkungen angeben, die ein Argumenttyp erfüllen muss.

Tipp

Weitere Informationen zum Typsystem von C# – einschließlich class Vs. struct, Generika und Schnittstellen – finden Sie in der Übersicht über das Typsystem im Abschnitt "Grundlagen".

Schließlich sind einige Features von Python in C# nicht verfügbar:

  1. Strukturelles Typisieren (Duck-Typing): In C# weisen Typen Namen und Deklarationen auf. Mit Ausnahme von Tupeln sind Typen mit derselben Struktur nicht austauschbar.
  2. REPL: C# verfügt nicht über eine read–eval–print-Loop (REPL), um schnell Prototyplösungen zu erstellen.
  3. Signifikante Leerzeichen: Sie müssen die geschweiften Klammern { und } korrekt verwenden, um den Block-Scope zu definieren.

Wenn Sie mit Python vertraut sind, sollten Sie sich mit C# schnell zurechtfinden. Die Sprachen haben ähnliche Konzepte und ähnliche Idiome zur Verwendung.

Nächste Schritte