Freigeben über


Roadmap für JavaScript- und TypeScript-Entwickler, die C lernen#

Wenn Sie einem Team beitreten, das C# verwendet, oder es für die serverseitige oder Full-Stack-Entwicklung erkunden, hilft Ihnen dieser Artikel, schnell produktiv zu werden. Es hebt hervor, was aus JavaScript und TypeScript vertraut ist und was in C# neu ist.

C#, TypeScript und JavaScript sind alle Mitglieder der C-Familie von Sprachen. Die Ähnlichkeiten zwischen den Sprachen helfen Ihnen, schnell produktiv in C# zu werden.

  1. Ähnliche Syntax: JavaScript, TypeScript und C# befinden sich in der C-Familie der Sprachen. Diese Ähnlichkeit bedeutet, dass Sie C# bereits lesen und verstehen können. Es gibt einige Unterschiede, aber die meiste Syntax ist ähnlich zu JavaScript und C. Die geschweiften Klammern und Semikolons sind vertraut. Die Steuerelementanweisungen wie if, else, und switch sind identisch. Die Schleifenanweisungen von for, whileund do...while sind identisch. Die gleichen Schlüsselwörter für class und interface befinden sich sowohl in C# als auch in TypeScript. Die Zugriffsmodifizierer in TypeScript und C#, von public bis private, sind identisch.
  2. Das => Token: Alle Sprachen unterstützen einfache Funktionsdefinitionen. In C# werden sie als Lambda-Ausdrücke bezeichnet. In JavaScript werden sie in der Regel als Pfeilfunktionen bezeichnet.
  3. Funktionshierarchien: Alle drei Sprachen unterstützen lokale Funktionen, die in anderen Funktionen definiert sind.
  4. Async /Await: Alle drei Sprachen verwenden die gleichen async und await Schlüsselwörter für die asynchrone Programmierung.
  5. Garbage Collection: Alle drei Sprachen basieren auf einem Garbage Collector für die automatische Speicherverwaltung.
  6. Ereignismodell: Die Syntax von event C# ähnelt dem JavaScript-Modell für DOM-Ereignisse (Document Object Model).
  7. Paket-Manager: NuGet ist der am häufigsten verwendete Paket-Manager für C#, ähnlich wie npm für JavaScript-Anwendungen. C#-Bibliotheken werden in Assemblys bereitgestellt.

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:

// TypeScript
let name: string = "Hello";
let count: number = 5;
// C#
string name = "Hello";
int count = 5;

Async / await:

// TypeScript
async function fetchData(): Promise<string> {
    const response = await fetch(url);
    return await response.text();
}
// C#
async Task<string> FetchDataAsync() {
    var response = await client.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

Weitere Informationen: Asynchrone Programmierung

Klassen:

// TypeScript
class Point {
    constructor(public x: number, public y: number) {}
}
// C#
record Point(int X, int Y);

Weitere Informationen: Datensätze

Mustervergleich:

// TypeScript - manual type checking
if (typeof value === "string") { /* ... */ }
// C# - pattern matching
if (value is string s) { /* use s */ }

Weitere Informationen: Musterabgleich

Neuigkeiten für Sie in C#

Während Sie C# lernen, treffen Sie auf Konzepte, die nicht Teil von JavaScript sind. Einige dieser Konzepte sind Ihnen möglicherweise vertraut, wenn Sie TypeScript verwenden:

  1. C#-Typsystem: C# ist eine stark typierte Sprache. Jede Variable hat einen Typ, und dieser Typ kann nicht geändert werden. Sie definieren class oder struct typen. Sie können Definitionen definieren interface , die das von anderen Typen implementierte Verhalten definieren. TypeScript enthält viele dieser Konzepte, aber da TypeScript auf JavaScript basiert, ist das Typsystem nicht so streng.
  2. Musterabgleich: Der Musterabgleich ermöglicht präzise bedingte Anweisungen und Ausdrücke basierend auf der Form komplexer Datenstrukturen. Der is Ausdruck überprüft, ob eine Variable ein Bestimmtes Muster ist. Der musterbasierte switch-Ausdruck bietet eine umfangreiche Syntax, um eine Variable zu prüfen und Entscheidungen basierend auf ihren Merkmalen zu treffen.
  3. 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.
  4. Nullable- und nicht-nullbare Typen: C# unterstützt nullable Wertetypen und nullbare Verweistypen, indem das ? Suffix an einen Typ angefügt wird. Bei Nullable-Typen warnt Sie der Compiler, wenn Sie den Nullable-Typ nicht auf null überprüfen, bevor Sie den Ausdruck dereferenzieren. Bei Non-Nullable-Typen werden Sie vom Compiler gewarnt, wenn Sie dieser Variablen möglicherweise einen null-Wert zuweisen. Mithilfe dieser Features können Sie die Anzahl der von Ihrer Anwendung ausgelösten System.NullReferenceException-Klassen minimieren. Die Syntax könnte aus der Verwendung von ? durch TypeScript für optionale Eigenschaften vertraut sein.
  5. LINQ: Language Integrated Query (LINQ) bietet eine allgemeine Syntax zum Abfragen und Transformieren von Daten (unabhängig vom Speicher).

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".

Während Sie mehr erfahren, werden andere Unterschiede offensichtlich, aber viele dieser Unterschiede sind im Umfang kleiner.

Einige vertraute Features und Idiome aus JavaScript und TypeScript sind in C# nicht verfügbar:

  1. dynamische Typen: C# verwendet statische Typisierung. Eine Variabledeklaration enthält den Typ, und dieser Typ kann nicht geändert werden. Es gibt einen dynamic Typ in C#, der laufzeitbindung bereitstellt.
  2. Prototypische Vererbung: C#-Vererbung ist Teil der Typdeklaration. Eine C# class -Deklaration gibt eine beliebige Basisklasse an. In JavaScript legen Sie die __proto__ Eigenschaft so fest, dass der Basistyp für jede Instanz festgelegt wird.
  3. Interpretierte Sprache: C#-Code muss kompiliert werden, bevor Sie ihn ausführen. JavaScript-Code kann direkt im Browser ausgeführt werden.

Darüber hinaus stehen einige weitere TypeScript-Features in C# nicht zur Verfügung:

  1. Union-Typen: C# unterstützt keine Union-Typen. Designvorschläge sind jedoch in Bearbeitung.
  2. Dekorateure: C# verfügt nicht über Dekorateure. Einige gängige Decorators (z. B. @sealed) sind in C# reservierte Schlüsselwörter. Andere gängige Dekorateure verfügen möglicherweise über entsprechende Attribute. Für andere Dekorateure können Sie eigene Attribute erstellen.
  3. Verzeihlichere Syntax: Der C#-Compiler parst Code strenger als JavaScript erfordert.

Wenn Sie eine Webanwendung erstellen, sollten Sie blazor verwenden, um Ihre Anwendung zu erstellen. Blazor ist ein Full-Stack-Webframework, das für C# erstellt wurde. Blazor-Komponenten können auf dem Server, als .NET-Assemblys oder auf dem Client mit WebAssembly ausgeführt werden. Blazor unterstützt die Interoperabilität mit Ihren bevorzugten JavaScript- oder TypeScript-Bibliotheken.

Nächste Schritte