Question

C # 4.0 introduit le mot clé dynamic , qui sera recherché au moment de l'exécution.

Est-ce que cela signifie que nous n’aurons plus besoin d’une réflexion maladroite? Si oui, pouvez-vous en montrer un exemple?

Était-ce utile?

La solution

Nous aurons toujours Reflection - l'utilisation de 'dynamic' contre des objets CLR classiques invoquera un répartiteur basé sur Reflection.

Donc, nous aurons toujours la réflexion, mais ce sera plus facile à faire.

Voici un exemple:

// Via 'dynamic'    
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;

// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);

Je ne sais pas pour vous, mais j'aime l'ancien. =)

Dans ces deux cas, je n’obtiens aucune vérification au moment de la compilation, aucun Intellisense, aucun support IDE - mais le premier cas est beaucoup plus expressif que le second.

Autres conseils

La répartition dynamique n’est qu’une des utilisations possibles de Reflection. Il y a de nombreuses bonnes raisons d'interroger une classe sur sa structure, d'obtenir des informations sur cette structure et de la visualiser sous une forme ou d'agir d'une certaine manière sans jamais accéder de manière dynamique aux membres. La réflexion est là pour rester. :)

Si vous souhaitez des exemples du mot clé dynamic, , voici une vidéo de PDC de l'homme lui-même en parle (et d'autres éléments C # 4.0 liés).

Dynamic contribuera beaucoup à résoudre les problèmes avec des méthodes connues uniquement par leur nom, lorsque ce nom est connu et fixé au moment de la compilation - mais bien sûr, de telles méthodes pourraient également être exprimées en interfaces si vous contrôlez les types.

Il est des cas où dynamic n'aiderait pas du tout:

  • où le nom de la méthode n’est pas connu au moment de la compilation (c’est-à-dire qu’il est chargé depuis les entrées config / user)
  • création d'objet
  • peut-être des scénarios de génériques

Les utilisations les plus importantes que je vois pour dynamique sont:

  • COM interop (évidemment)
  • support d'opérateur générique
  • dactylographie sans interface commune
  • DLR interop (voir les commentaires)

Mais cela ne règle définitivement pas tous les problèmes de réflexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top