Envisagez un scénario dans lequel vous devez créer un objet dynamique avec des propriétés qui peuvent être ajoutées dynamiquement au moment de l'exécution. Au lieu d'utiliser un dictionnaire ou une collection de paramètres, vous pouvez exploiter la classe ExpandoObject.
ExpandoObject
ExpandoObject vous permet d'ajouter et de supprimer des membres de ses instances au moment de l'exécution, permettant des capacités de liaison dynamique. Il fournit un moyen pratique de manipuler les propriétés de manière dynamique, comme le montre l'exemple suivant :
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!";
Objet dynamique personnalisé
En vous basant sur l'approche ExpandoObject, vous pouvez créer un objet dynamique personnalisé qui gère la récupération et la définition des propriétés dynamiques. Le code suivant illustre ce concept :
public static dynamic GetDynamicObject(Dictionary<string, object> properties) { return new MyDynObject(properties); } public sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; } public override bool TryGetMember(GetMemberBinder binder, out object result) { if (_properties.ContainsKey(binder.Name)) { result = _properties[binder.Name]; return true; } else { result = null; return false; } } public override bool TrySetMember(SetMemberBinder binder, object value) { if (_properties.ContainsKey(binder.Name)) { _properties[binder.Name] = value; return true; } else { return false; } } }
En implémentant l'interface DynamicObject, vous obtenez un contrôle total sur le mécanisme d'accès aux membres dynamiques. Cela vous permet d'implémenter des règles et des comportements personnalisés pour votre objet dynamique.
Utilisation
Une fois votre objet dynamique personnalisé en place, vous pouvez ajouter des propriétés et les récupérer au moment de l'exécution. :
var dyn = GetDynamicObject(new Dictionary<string, object> { { "prop1", 12 }, }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
Remarque :
Les objets dynamiques sont puissants mais doivent être utilisé avec prudence. Le compilateur ne peut pas vérifier les appels dynamiques et vous risquez de rencontrer des erreurs d'exécution si vous ne faites pas attention. Il est crucial de comprendre les mécanismes sous-jacents et les problèmes potentiels avant de les utiliser dans le code de production.
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!