0Pricing
C# Academy · Lezione

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

  1. Inferenza del tipo delle variabili locali con var
  2. Quando evitare var
  3. Il tipo dynamic
  4. Espressioni new con tipo di destinazione
← Torna a C# Academy