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
- Inferencia de tipos de variables locales con var
- Cuándo evitar var
- El tipo dynamic
- Expresiones new con tipo de destino