0Pricing
C# Academy · Lección

El tipo dynamic

Aplace la resolución del tipo hasta la ejecución mediante dynamic.

El tipo dynamic es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

¿Qué es dynamic?

El tipo dynamic omite la comprobación de tipos en tiempo de compilación. El acceso a miembros y las operaciones se resuelven en tiempo de ejecución.

using System;

class Program {
    static void Main() {
        dynamic value = 10;
        Console.WriteLine(value + 5);
    }
}

Reasignación de tipos diferentes

Una variable dynamic puede contener cualquier tipo e incluso cambiar de tipo entre asignaciones.

using System;

class Program {
    static void Main() {
        dynamic x = 1;
        Console.WriteLine(x);
        x = "now a string";
        Console.WriteLine(x);
    }
}

Enlace en tiempo de ejecución

Con dynamic, el compilador confía en usted. Las búsquedas de métodos y propiedades se realizan cuando se ejecuta la línea, no cuando se compila.

using System;

class Program {
    static void Main() {
        dynamic text = "hello";
        Console.WriteLine(text.ToUpper());
    }
}

Los errores aparecen en tiempo de ejecución

Como la comprobación se aplaza, un miembro incorrecto produce una RuntimeBinderException en tiempo de ejecución en lugar de impedir la compilación.

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 frente a var

var es fijo en tiempo de compilación; dynamic mantiene su flexibilidad en tiempo de ejecución. Parecen similares, pero se comportan de formas muy diferentes.

using System;

class Program {
    static void Main() {
        var fixedType = 10;
        dynamic flexible = 10;
        flexible = "changed";
        Console.WriteLine(fixedType + " " + flexible);
    }
}

Aritmética con dynamic

Los operadores aplicados a dynamic se resuelven en tiempo de ejecución según los valores reales involucrados.

using System;

class Program {
    static void Main() {
        dynamic a = 3;
        dynamic b = 4;
        Console.WriteLine(a * b);
    }
}

Valores devueltos dynamic

Un método puede devolver dynamic cuando el tipo realmente varía, pero quienes lo llaman pierden la ayuda del compilador en tiempo de compilación.

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));
    }
}

Casos de uso de dynamic

dynamic resulta útil para la interoperabilidad con COM, los datos similares a JSON y las llamadas a código cuya estructura se desconoce hasta el tiempo de ejecución.

using System;

class Program {
    static void Main() {
        dynamic data = 100;
        data += 1;
        Console.WriteLine(data);
    }
}

Coste de rendimiento

El enlace en tiempo de ejecución tiene un coste. Para bucles estrechos o código sencillo, prefiera tipos estáticos por velocidad y seguridad.

using System;

class Program {
    static void Main() {
        int fast = 0;
        for (int i = 0; i < 5; i++) fast += i;
        Console.WriteLine(fast);
    }
}

Sin IntelliSense

Los editores no pueden sugerir miembros para un dynamic, ya que el tipo se desconoce hasta el tiempo de ejecución. Esto ralentiza el desarrollo.

using System;

class Program {
    static void Main() {
        dynamic s = "Code";
        Console.WriteLine(s.Length);
    }
}

Úselo con moderación

Recurra a dynamic solo cuando la tipificación estática realmente no pueda expresar el escenario; en los demás casos, prefiera tipos concretos.

using System;

class Program {
    static void Main() {
        dynamic flexible = 7;
        Console.WriteLine(flexible.GetType().Name);
    }
}

Comprobación rápida

Compruebe su comprensión de dynamic.

Resumen

dynamic desactiva la comprobación de tipos en tiempo de compilación y resuelve los miembros en tiempo de ejecución, por lo que una variable dynamic puede cambiar de tipo y las llamadas no válidas producen una RuntimeBinderException.

A diferencia de var, que es fijo en tiempo de compilación, dynamic es flexible, pero reduce el rendimiento, elimina IntelliSense y debe usarse con moderación.

Preguntas frecuentes

¿La lección «El tipo dynamic» es gratis?

Sí — el texto completo de «El tipo dynamic» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «El tipo dynamic»?

Aplace la resolución del tipo hasta la ejecución mediante dynamic. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «El tipo dynamic»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Inferencia de tipos de variables locales con var
  2. Cuándo evitar var
  3. El tipo dynamic
  4. Expresiones new con tipo de destino
← Volver a C# Academy