Il tipo dynamic
Rimandi la risoluzione del tipo all'esecuzione con dynamic.
Il tipo dynamic è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Che cos'è dynamic?
Il tipo dynamic bypassa il controllo dei tipi in fase di compilazione. L'accesso ai membri e le operazioni vengono invece risolti in fase di esecuzione.
using System;
class Program {
static void Main() {
dynamic value = 10;
Console.WriteLine(value + 5);
}
}Riassegnare tipi diversi
Una variabile dynamic può contenere qualsiasi tipo e può persino cambiare tipo tra un'assegnazione e l'altra.
using System;
class Program {
static void Main() {
dynamic x = 1;
Console.WriteLine(x);
x = "now a string";
Console.WriteLine(x);
}
}Binding in fase di esecuzione
Con dynamic, il compilatore si fida di Lei. La ricerca di metodi e proprietà avviene quando la riga viene eseguita, non quando viene compilata.
using System;
class Program {
static void Main() {
dynamic text = "hello";
Console.WriteLine(text.ToUpper());
}
}Gli errori emergono in fase di esecuzione
Poiché il controllo viene rimandato, un membro errato genera una RuntimeBinderException in fase di esecuzione invece di impedire la compilazione.
using System;
using Microsoft.CSharp.RuntimeBinder;
class Program {
static void Main() {
dynamic n = 5;
try {
n.NoSuchMethod();
} catch (RuntimeBinderException) {
Console.WriteLine("No such member");
}
}
}dynamic e var
var è fisso in fase di compilazione, mentre dynamic rimane flessibile in fase di esecuzione. Sembrano simili, ma si comportano in modo molto diverso.
using System;
class Program {
static void Main() {
var fixedType = 10;
dynamic flexible = 10;
flexible = "changed";
Console.WriteLine(fixedType + " " + flexible);
}
}Aritmetica con dynamic
Gli operatori applicati a dynamic vengono risolti in fase di esecuzione in base ai valori effettivamente coinvolti.
using System;
class Program {
static void Main() {
dynamic a = 3;
dynamic b = 4;
Console.WriteLine(a * b);
}
}Valori restituiti dynamic
Un metodo può restituire dynamic quando il tipo varia realmente, ma chi lo utilizza perde il supporto del compilatore in fase di compilazione.
using System;
class Program {
static dynamic GetValue(bool flag) {
return flag ? (dynamic)42 : "text";
}
static void Main() {
Console.WriteLine(GetValue(true));
Console.WriteLine(GetValue(false));
}
}Casi d'uso di dynamic
dynamic è utile per l'interoperabilità COM, i dati simili a JSON e le chiamate a codice la cui struttura è sconosciuta fino alla fase di esecuzione.
using System;
class Program {
static void Main() {
dynamic data = 100;
data += 1;
Console.WriteLine(data);
}
}Costo in termini di prestazioni
Il binding in fase di esecuzione comporta un sovraccarico. Per i cicli intensivi o il codice semplice, preferisca i tipi statici per ottenere maggiore velocità e sicurezza.
using System;
class Program {
static void Main() {
int fast = 0;
for (int i = 0; i < 5; i++) fast += i;
Console.WriteLine(fast);
}
}Nessun IntelliSense
Gli editor non possono suggerire membri per un valore dynamic, poiché il tipo è sconosciuto fino alla fase di esecuzione. Questo rallenta lo sviluppo.
using System;
class Program {
static void Main() {
dynamic s = "Code";
Console.WriteLine(s.Length);
}
}Utilizzarlo con parsimonia
Ricorra a dynamic solo quando la tipizzazione statica non è realmente in grado di esprimere lo scenario; in caso contrario, preferisca i tipi concreti.
using System;
class Program {
static void Main() {
dynamic flexible = 7;
Console.WriteLine(flexible.GetType().Name);
}
}Verifica rapida
Verifichi la propria comprensione di dynamic.
Riepilogo
dynamic disattiva il controllo dei tipi in fase di compilazione e risolve i membri in fase di esecuzione, quindi una variabile dynamic può cambiare tipo e le chiamate non valide generano una RuntimeBinderException.
A differenza di var (fisso in fase di compilazione), dynamic è flessibile, ma comporta un costo in termini di prestazioni, fa perdere IntelliSense e dovrebbe essere utilizzato con parsimonia.
Domande Frequenti
La lezione «Il tipo dynamic» è gratuita?
Sì — il testo completo di «Il tipo dynamic» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Il tipo dynamic»?
Rimandi la risoluzione del tipo all'esecuzione con dynamic. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Il tipo dynamic»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Inferenza del tipo delle variabili locali con var
- Quando evitare var
- Il tipo dynamic
- Espressioni new con tipo di destinazione