English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#4.0 (.NET 4.5)a introduit un nouveau type appelé dynamic, qui évite la vérification de type à la compilation. Le type dynamique saute la vérification de type à la compilation ; au lieu de cela, il résout le type à l'exécution.
Les variables de type dynamique sont définies en utilisant le mot-clé dynamic.
dynamic MyDynamicVar = 1;
Dans la plupart des cas, le compilateur compile les types dynamiques en type d'objet. Cependant, le type réel des variables de type dynamique est résolu à l'exécution.
dynamic MyDynamicVar = 1; Console.WriteLine(MyDynamicVar.GetType());
System.Int32
Les types dynamiques changent de type à l'exécution selon la valeur allouée. L'exemple suivant montre comment le type d'une variable dynamique change selon la valeur allouée.
static void Main(string[] args) { dynamic MyDynamicVar = 100; Console.WriteLine("Valeur : {0}, Type : {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = "Hello World!!"; Console.WriteLine("Valeur : {0}, Type : {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = true; Console.WriteLine("Valeur : {0}, Type : {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = DateTime.Now; Console.WriteLine("Valeur : {0}, Type : {1}", MyDynamicVar, MyDynamicVar.GetType()); }
valeur :100, type : System.Int32 valeur : Hello World !!, type : System.String valeur : True, type : System.Boolean valeur : 01-01-2014,type : System.DateTime
Les variables de type dynamique se convertissent implicitement en d'autres types.
dynamic d1 = 100; int i = d1; d1 = "Hello"; string greet = d1; d1 = DateTime.Now; DateTime dt = d1;
Si l'objet de classe est alloué à un type dynamique, le compilateur ne vérifiera pas la validité des méthodes et des attributs personnalisés du type dynamique. Voir l'exemple suivant.
class Program { static void Main(string[] args) { dynamic stud = new Student(); stud.DisplayStudentInfo(1, "Bill");// Erreur en temps d'exécution, pas d'erreur à la compilation stud.DisplayStudentInfo("1");// Erreur en temps d'exécution, pas d'erreur à la compilation stud.FakeMethod();// Erreur en temps d'exécution, pas d'erreur à la compilation } } public class Student { public void DisplayStudentInfo(int id) { } }
Dans l'exemple ci-dessus, le compilateur C# ne vérifie pas les paramètres, les types de paramètres ou leur absence. Il les vérifie au moment de l'exécution et lance une exception en temps réel si elles sont invalides. Veuillez noter que les types dynamiques ne sont pas pris en charge par Visual Studio IntelliSense. Veuillez noter que les types dynamiques ne sont pas pris en charge par Visual Studio IntelliSense.
L'API de runtime de langage dynamique (DLR) fournit la base pour les types dynamiques dans C#.