Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se stai entrando a far parte di un team che usa C#, o lo stai esplorando per lo sviluppo lato server o full-stack, questo articolo ti aiuterà a diventare subito produttivi. Vengono evidenziati gli elementi noti da JavaScript e TypeScript e le novità di C#.
C#, TypeScript e JavaScript sono tutti membri della famiglia di linguaggi C. Le analogie tra i linguaggi consentono di diventare rapidamente produttivi in C#.
-
Sintassi simile: JavaScript, TypeScript e C# si trovano nella famiglia di linguaggi C. Questa somiglianza significa che è già possibile leggere e comprendere C#. Esistono alcune differenze, ma la maggior parte della sintassi è uguale a quella di JavaScript e C. Le parentesi graffe e i punti e virgola risultano familiari. Le istruzioni di controllo come
if,elseeswitchsono le stesse. Le istruzioni di ciclo difor,whileedo...whilesono le stesse. Le stesse parole chiave perclasseinterfacesi trovano sia in C# che in TypeScript. I modificatori di accesso in TypeScript e C#, dapublicaprivate, sono gli stessi. -
Token
=>: tutti i linguaggi supportano definizioni di funzioni leggere. In C# sono denominate espressioni lambda. In JavaScript vengono in genere chiamate funzioni freccia. - Gerarchie di funzioni: tutti e tre i linguaggi supportano funzioni locali, che sono funzioni definite in altre funzioni.
-
Async/Await: tutti e tre i linguaggi condividono le stesse
asyncparole chiave eawaitper la programmazione asincrona. - Garbage Collection: tutti e tre i linguaggi si basano su un Garbage Collector per la gestione automatica della memoria.
-
Modello di evento: la sintassi di
eventC#è simile al modello JavaScript per gli eventi DOM (Document Object Model). - Gestione pacchetti: NuGet è la gestione pacchetti più comune per C#, simile a npm per le applicazioni JavaScript. Le librerie C# vengono distribuite negli assembly.
Sintassi a colpo d'occhio
Gli esempi seguenti illustrano alcuni modelli comuni affiancati. Questi confronti non sono esaustivi, ma offrono un'impressione rapida per le differenze di sintassi.
Annotazioni dei tipi:
// 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();
}
Altre informazioni: Programmazione asincrona
Classi:
// TypeScript
class Point {
constructor(public x: number, public y: number) {}
}
// C#
record Point(int X, int Y);
Altre informazioni: Record
Confronto di pattern:
// TypeScript - manual type checking
if (typeof value === "string") { /* ... */ }
// C# - pattern matching
if (value is string s) { /* use s */ }
Ulteriori informazioni: Pattern matching
Novità per te in C#
Man mano che si apprende C#, si riscontrano concetti che non fanno parte di JavaScript. Alcuni di questi concetti potrebbero essere familiari se si usa TypeScript:
-
C# Type System: C# è un linguaggio fortemente tipizzato. Ogni variabile ha un tipo e tale tipo non può cambiare. Si definiscono i tipi
classostruct. È possibile definireinterfacedefinizioni che definiscono il comportamento implementato da altri tipi. TypeScript include molti di questi concetti, ma poiché TypeScript è basato su JavaScript, il sistema dei tipi non è così rigoroso. -
Pattern matching: la corrispondenza di pattern consente istruzioni condizionali ed espressioni concise in base alla forma di strutture di dati complesse.
L'espressione
iscontrolla se una variabile "è" un modello. L'espressione basata suswitchcriteri fornisce una sintassi avanzata per esaminare una variabile e prendere decisioni in base alle relative caratteristiche. - Interpolazione di stringhe e valori letterali stringa non elaborati: l'interpolazione di stringhe consente di inserire espressioni valutate in una stringa, anziché usare identificatori posizionali. I valori letterali stringa non elaborati consentono di ridurre al minimo le sequenze di escape nel testo.
-
Tipi annullabili e non annullabili: C# supporta tipi di valore annullabili e tipi di riferimento annullabili aggiungendo il suffisso
?a un tipo. Per i tipi nullable, il compilatore avvisa se non si cercanullprima di dereferenziare l'espressione. Per i tipi non annullabili, il compilatore avvisa sul possibile assegnamento di unnullvalore a quella variabile. Queste funzionalità possono ridurre al minimo l'applicazione che genera un'eccezione System.NullReferenceException. La sintassi potrebbe essere nota dall'uso di?in TypeScript per le proprietà facoltative. - LINQ: linQ (Language Integrated Query) fornisce una sintassi comune per eseguire query e trasformare i dati, indipendentemente dalla relativa risorsa di archiviazione.
Suggerimento
Per altre informazioni sul sistema dei tipi di C#, tra cui class, struct generics e interfacce, visitare la panoramica del sistema dei tipi nella sezione nozioni di base.
Come si apprende di più, altre differenze diventano evidenti, ma molte di queste differenze sono più piccole nell'ambito.
Alcune funzionalità e idiomi familiari di JavaScript e TypeScript non sono disponibili in C#:
-
tipi dinamici: C# usa la digitazione statica. Una dichiarazione di variabile include il tipo e tale tipo non può cambiare. Esiste un tipo in C# che fornisce l'associazione
dynamicdi runtime. -
Ereditarietà prototipale: l'ereditarietà C# fa parte della dichiarazione di tipo. Una dichiarazione C#
classindica qualsiasi classe di base. In JavaScript si imposta la__proto__proprietà per impostare il tipo di base in qualsiasi istanza. - Linguaggio interpretato: il codice C# deve essere compilato prima di eseguirlo. Il codice JavaScript può essere eseguito direttamente nel browser.
Inoltre, alcune altre funzionalità di TypeScript non sono disponibili in C#:
- Tipi di unione: C# non supporta i tipi di unione. Tuttavia, le proposte di progettazione sono in corso.
-
Decorator: C# non dispone di decorator. Alcuni elementi decorator comuni, ad esempio
@sealedsono parole chiave riservate in C#. Altri elementi Decorator comuni potrebbero avere attributi corrispondenti. Per altri decorator, è possibile creare attributi personalizzati. - Sintassi più tollerante: il compilatore C# analizza il codice in modo più rigoroso di quanto richieda JavaScript.
Se si sta creando un'applicazione Web, è consigliabile usare Blazor per compilare l'applicazione. Blazor è un framework Web full-stack compilato per C#. I componenti Blazor possono essere eseguiti nel server, come assembly .NET o nel client tramite WebAssembly. Blazor supporta l'interoperabilità con le librerie JavaScript o TypeScript preferite.
Passaggi successivi
- Panoramica di C#: Panoramica generale di tutte le funzionalità C#.
- Esercitazioni per principianti: Apprendere in modo dettagliato C# con lezioni interattive.
- Cosa è possibile creare con C#: Esplorare i tipi di applicazione che è possibile creare con C#.
- Nozioni fondamentali su C#: approfondire il sistema dei tipi, la programmazione orientata agli oggetti e altro ancora.