English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#4.0 (.NET 4.5La introducción de un nuevo tipo llamado dynamic evita la verificación de tipos en tiempo de compilación. El tipo dinámico omite la verificación de tipos en tiempo de compilación; en su lugar, resuelve el tipo en tiempo de ejecución.
Las variables de tipo dinámico se definen con la palabra clave dynamic.
dynamic MyDynamicVar = 1;
En la mayoría de los casos, el compilador compilará los tipos dinámicos como tipos de objeto. Sin embargo, el tipo real de la variable de tipo dinámico se resolverá en tiempo de ejecución.
dynamic MyDynamicVar = 1; Console.WriteLine(MyDynamicVar.GetType());
System.Int32
Los tipos dinámicos cambian de tipo en tiempo de ejecución según el valor asignado. El siguiente ejemplo muestra cómo los variables dinámicas cambian de tipo según el valor asignado.
static void Main(string[] args) { dynamic MyDynamicVar = 100; Console.WriteLine("Valor: {0}, Tipo: {1}), MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = "Hello World!!"; Console.WriteLine("Valor: {0}, Tipo: {1}), MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = true; Console.WriteLine("Valor: {0}, Tipo: {1}), MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = DateTime.Now; Console.WriteLine("Valor: {0}, Tipo: {1}), MyDynamicVar, MyDynamicVar.GetType()); }
valor:100, tipo: System.Int32 valor: Hello World !!, tipo: System.String valor: True, tipo: System.Boolean valor: 01-01-2014,tipo: System.DateTime
Las variables de tipo dinámico se convierten implícitamente a otros tipos.
dynamic d1 = 100; int i = d1; d1 = "Hello"; string greet = d1; d1 = DateTime.Now; DateTime dt = d1;
Si se asigna un objeto de clase a un tipo dinámico, el compilador no verificará los métodos y atributos correctos del tipo dinámico que guarda el objeto de clase personalizado. Vea el siguiente ejemplo.
class Program { static void Main(string[] args) { dynamic stud = new Student(); stud.DisplayStudentInfo(1, "Bill");// Error en tiempo de ejecución, sin errores en tiempo de compilación stud.DisplayStudentInfo("1");// Error en tiempo de ejecución, sin errores en tiempo de compilación stud.FakeMethod();// Error en tiempo de ejecución, sin errores en tiempo de compilación } } public class Student { public void DisplayStudentInfo(int id) { } }
En el ejemplo anterior, el compilador de C# no verifica los parámetros, el tipo de parámetro o que no exista. Verifica estos elementos en tiempo de ejecución y, si son inválidos, lanza una excepción de tiempo de ejecución. Tenga en cuenta que los tipos dinámicos no son compatibles con Visual Studio IntelliSense. Tenga en cuenta que los tipos dinámicos no son compatibles con Visual Studio IntelliSense.
La API de tiempo de ejecución de lenguajes dinámicos (DLR) proporciona la infraestructura básica para los tipos dinámicos en C#.