Quelle est l'utilisation pratique de & # 8220; dynamique & # 8221; variable en C # 4.0?

StackOverflow https://stackoverflow.com/questions/253460

  •  05-07-2019
  •  | 
  •  

Question

Quelle est leur utilisation si, lorsque vous appelez la méthode, elle n’existe peut-être pas?

Est-ce que cela signifie que vous seriez capable de créer dynamiquement une méthode sur un objet dynamique?

Quelles sont les utilisations pratiques de ceci?

Était-ce utile?

La solution

Vous ne serez pas en mesure de créer dynamiquement la méthode - mais vous pouvez obtenir une implémentation de IDynamicMetaObject (souvent en étendant DynamicObject ) pour répondre si la méthode existait .

Utilisations:

  • Programmation sur des objets COM avec une API faible (par exemple, office)
  • Appel dans des langages dynamiques tels que Ruby / Python
  • Rendre potentiellement "explorable" Objets - imaginez une requête de type XPath mais via un appel de méthode / propriété, par exemple. document.RootElement.Person [5] .Name [" attribut &];
  • Il ne fait aucun doute que nous aurions encore beaucoup à penser à:)

Autres conseils

Tout d'abord, vous ne pouvez pas l'utiliser maintenant. Cela fait partie de C # 4, qui sera publié dans le futur.

En gros, il s’agit d’un objet dont les propriétés ne seront pas connues avant l’exécution. Cela vient peut-être d'un objet COM. C’est peut-être un objet "définir à la volée" comme vous le décrivez (bien que je ne pense pas qu'il existe un moyen de créer ceux qui sont ou qui sont prévus).

Cela ressemble plutôt à un objet System.Object, sauf que vous êtes autorisé à appeler des méthodes inconnues du compilateur et que le moteur d'exécution sait comment appeler.

Les deux problèmes auxquels je peux penser sont la frappe au canard et la possibilité d'utiliser le langage C # comme langage de script dans les applications, à l'instar de javascript et de Python . Ce dernier me fait déchirer un peu.

Considérez-le comme une forme simplifiée de réflexion. Au lieu de cela:

object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });

Vous obtenez ceci:

IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);

Je vois plusieurs frameworks ORM dynamiques en cours d’écriture. Ou diable en écrire un vous-même.

Je suis d’accord avec Jon Skeet, vous pourriez voir des façons intéressantes d’explorer des objets. Peut-être avec des sélecteurs comme jQuery.

Appel de COM et des langages dynamiques.

Je suis impatient de voir s'il existe un moyen de faire une méthode_ manquante de type Ruby.

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