C# 4: Exemple du Monde Réel de Dynamique des Types
Je pense que j'ai mon cerveau à moitié enroulé autour de la Dynamique des Types de concept en C# 4, mais ne peux pas pour la vie de me comprendre un scénario où j'avais réellement envie de l'utiliser.
Je suis sûr qu'il ya beaucoup, mais je suis juste avoir de la difficulté à faire la connexion de la façon dont je pourrais concevoir une solution qui est mieux résolu avec la dynamique, par opposition aux interfaces, l'injection de dépendance, etc.
Alors, quelle est une application réelle scénario où la dynamique type d'utilisation est appropriée?
- Voir: stackoverflow.com/questions/253460/...
- Outre les objets COM, je suis fermement d'avis qu'ils n'en sont pas vraiment particulièrement utile en C#/.NET, et une meilleure solution existe presque toujours...
- Oh, et l'interopérabilité avec les langages dynamiques comme IronPython de cours. Pure C#, il n'a pas sa place bien que.
- Vous n'avez qu'à mentionner une chose de plus à répéter l'ensemble de ma réponse en commentaire à la question. 😉
- Hé, oui. N'a pas fait de lire correctement lorsque j'ai d'abord commenté, mais il semble que nous ont été principalement écrit les mêmes choses en même temps. 😛
- Il y a une Réelle mise en Œuvre dans MSDN: http://msdn.microsoft.com/en-us/library/ee461504.aspx
- Related post ici.
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de cas où vous êtes déjà à l'aide de typage dynamique et de liaison dynamique aujourd'hui. Vous ne pouvez pas le réaliser, parce que c'est tous cachés derrière des chaînes ou
System.Object
, puisque jusqu'à la C# 4, le soutien nécessaire n'était pas là.Est un exemple d'interopérabilité COM: COM est en fait un semi-dynamique de l'objet système. Quand vous faites COM interop, beaucoup de méthodes de retour d'un objet dynamique, mais parce que le C# n'a pas les soutenir, ils ont été retournés comme
System.Object
et vous avez eu à jeter vous-même, peut-être attraper les exceptions sur le chemin.Un autre exemple est l'interaction avec typées dynamiquement (ou même non typé) de données, tels que JSON, CSV, HTML, schemaless XML, schemaless services web, schemaless bases de données (qui sont, après tout, la nouvelle hotness). Aujourd'hui, vous utilisez des chaînes pour ceux. Une API XML ressemblerait
et ainsi de suite. Mais que diriez-vous:
N'est-ce pas agréable à regarder?
Un troisième exemple est la réflexion. Aujourd'hui, l'invocation d'une méthode par réflexion se fait en passant d'une chaîne à
InvokeMember
(ou quelle que soit la chose est appelée). Ne serait-il pas plus agréable, vous savez, il suffit d'invoquer la fichue chose?Puis, il y a génération de la dynamique de données (en gros le contraire de la seconde, par exemple). Voici un exemple sur la façon de générer de la dynamique XML:
Ce n'est pas aussi belle que l'équivalent de Ruby, mais il est le meilleur que je pouvais venir à si court préavis 🙂
Et le dernier mais non le moindre, l'intégration avec un typées dynamiquement de la langue. Si c'est du JavaScript dans une application Silverlight, une coutume moteur de règles intégré dans votre application d'entreprise ou un DLR exemple que vous hébergez dans votre programme de CAO/IDE/éditeur de texte.
XmlDocument
etXmlBuilder
classes qui prennent en charge cette API. Ce dernier devrait être assez évident, je pense.XmlDocument
est déjà une classe dans la .NET framework.)Il y a un exemple sur MSDN:
Un autre exemple est si vous avez de l'interopérabilité avec les langages dynamiques.
Il y a aussi des occasions où vous voulez faire un peu de code générique, mais vous ne pouvez pas, parce que même si les objets de mettre en œuvre la même méthode, ils ne partagent pas une base appropriée de la classe ou de l'interface qui déclare les méthodes que vous avez besoin. Un exemple de ceci est d'essayer de faire quelque chose de générique avec ints et court. C'est un peu un hack, mais dynamique vous permet d'appeler les mêmes méthodes sur ces différents types, permettant la réutilisation du code.
Mise à jour: Un peu de recherche sur trouve ici ce poste.
De Walter Almeida Blog: un scénario d'utilisation de la dynamique de mots clés de C# pour améliorer l'orientation de l'objet:
http://blog.walteralmeida.com/2010/05/using-the-dynamic-keyword-in-c-to-improve-objectorientation.html
Scott Watermasysk a écrit un article sur l'utilisation de la dynamique pour les clés du dictionnaire-propriété de cartographie sur l'MongoDB C# pilote.
http://simpable.com/code/mongodb-dynamics/
Je pense que d'autres ont donné quelques grandes réponses jusqu'à présent donc je veux juste ajouter que cet exemple par David Hanson. Hist post montre l'application pratique que j'ai trouvé jusqu'à présent pour les types de dynamiques en C#, où il les utilise pour créer des objets proxy. Dans cet exemple, il crée un proxy qui permet de soulever des exceptions sur WPF erreur de liaison. Je ne sais pas si cela pourrait également être obtenu dans le cas de WPF liaisons en utilisant CustomTypeDescriptors et descripteur de propriété des concepts en général, mais peu importe, je pense que l'utilisation de la nouvelle C# 4.0 type dynamique est une belle démonstration de ses capacités.
Collecte de liaison des exceptions dans WPF & Silverlight avec .net 4.0 Dynamique
Une autre utilisation que je peux penser pour les types de Dynamiques est de créer un proxy qui ne peut être branché qu'un DataContext dans WPF ou dans d'autres endroits où un objet générique type et de réflexion méthodes sont normalement utilisés pour interroger le type. Dans ces cas, en particulier lors de la construction des tests de type dynamique peut être utilisé, qui permettrait alors de accesseurs de propriété pour être appelés, et connecté en conséquence par le proxy de l'objet de façon dynamique, sans avoir à coder en dur des propriétés à l'intérieur d'un test en salle de classe.
J'ai lu un article intéressant à propos de ce (ci-joint) par Scott, Hanselman. Il souligne que, contrairement à l'utilisation de l'objet, vous pouvez utiliser la dynamique de méthodes de référence à partir d'anciens objets COM où le compilateur ne sait pas une méthode existe. J'ai trouvé le lien utile.
Scott, Hanselman - C#4 et la dynamique de mots clés