Maison >développement back-end >Tutoriel C#.Net >Programmation avancée C# Chapitre 12 Extension du langage dynamique
(1) DLR
La fonction dynamique de C#4 est Dynamic Language Runtime(Dynamic Language Runtime, faisant partie de DLR). DLR est un ensemble de services ajoutés à CLR.
(2) type dynamique
dynamique type autorisé Écrivez du code qui ignore la vérification de type lors de la compilation. Le compilateur suppose que toute opération définie pour un objet de type dynamique est valide et le compilateur ne vérifiera pas les erreurs avant de l'exécuter.
Exemple :
dynamic person = "人";string firstName = person.FirstName;
Ces deux lignes de code peuvent être compilées par le compilateur, mais une erreur sera signalée après avoir cliqué sur exécuter :
Il est à noter que bien que le type dynamique soit utile, il a un prix.
(3) Contient DLR ScriptRuntime
pour ajouter des scripts au Les fonctions d'édition d'application et la transmission de valeurs vers et depuis des scripts permettent aux applications d'utiliser des scripts pour terminer leur travail.
(4) DynamicObject et ExpandoObject
de Vous pouvez créer vos propres objets dynamiques en dérivant DynamicObject ou en utilisant ExpandoObject.
L'utilisation de la dérivation DynamicObject pour créer des objets dynamiques nécessite de remplacer trois méthodes : TrySetMembe(), TryGetMember() et TryInvokeMember().
La différence entre l'utilisation de ExpandoObject et DynamicObject pour dériver est qu'il n'est pas nécessaire de remplacer les méthodes.
Exemple :
class Program { static void Main(string[] args) { Func<string, string, string> getFullName = (f, l) => { return f + " " + l; }; dynamic byexobj = new ExpandoObject(); byexobj.FirstName = "李"; byexobj.LastName = "四"; byexobj.GetFullName = getFullName; Console.WriteLine(byexobj.GetType()); Console.WriteLine(byexobj.GetFullName(byexobj.FirstName, byexobj.LastName)); Console.WriteLine("====================="); dynamic dyobj = new MyDynamicObject(); dyobj.FirstName = "张"; dyobj.LastName = "三"; dyobj.GetFullName = getFullName; Console.WriteLine(dyobj.GetType()); Console.WriteLine(dyobj.GetFullName(dyobj.FirstName, dyobj.LastName)); Console.ReadKey(); } } public class MyDynamicObject : DynamicObject { Dictionary<string, object> dynamicData = new Dictionary<string, object>(); public override bool TrySetMember(SetMemberBinder binder, object value) { dynamicData[binder.Name] = value; return true; } public override bool TryGetMember(GetMemberBinder binder, out object result) { bool success = false; result = null; if (dynamicData.ContainsKey(binder.Name)) { result = dynamicData[binder.Name]; success = true; } else { result = "未找到该属性的值"; success = false; } return success; } public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { dynamic method = dynamicData[binder.Name]; result = method((string)args[0],(string)args[1]); return result != null; } }
Exécutez le code ci-dessus, le résultat est le suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!