Propriétés de la classe de création .NET Reflection

Je suis assez nouveau dans la reflection et je voudrais savoir, si possible, comment créer une instance d’une classe, puis append des propriétés à la classe, définir ces propriétés, puis les lire plus tard. Je n’ai pas de code car je ne sais même pas comment commencer. C # ou VB va bien.

Je vous remercie

EDIT: (pour élaborer)

Mon système a un créateur de formulaire dynamic. un de mes associés exige que les données du formulaire soient accessibles via le service Web. Mon idée était de créer une classe (basée sur le formulaire dynamic), d’append des propriétés à la classe (basée sur les champs de formulaire), de définir ces propriétés (en fonction des valeurs entrées pour ces champs) puis de renvoyer la classe dans le service Web.

De plus, le service Web sera en mesure de définir les propriétés de la classe et éventuellement de valider ces modifications dans la firebase database.

Je sais que cela est trop simplifié par pourquoi ne pas simplement KISS et générer le code XML requirejs pour revenir via le service Web, puis parsingr le code XML renvoyé pour remplir la firebase database.

Mon raisonnement est que, pour la raison développée que vous suggérez, je peux voir la valeur ou la raison de vouloir une classe dynamic?

Si vous voulez dire créer dynamicment une classe, les deux options sont:

  • Reflection.Emit – Difficile, rapide pour créer la classe
  • CodeDom – Moins difficile, plus lent à créer la classe

Si vous voulez créer une instance d’une classe existante, commencez par Activator.CreateInstance pour créer une instance de l’object, puis examinez les méthodes sur Type, telles que GetProperty, qui renverront un PropertyInfo sur lequel vous pouvez appeler GetValue et SetValue .


Mise à jour: pour le scénario que vous décrivez, renvoyant des données dynamics à partir d’un service Web, je vous déconseillerais cette approche, car il est difficile pour vous de coder et pour les langages à typage statique. Au lieu de cela, comme suggéré dans les commentaires et l’une des autres réponses, une sorte de dictionnaire serait probablement une meilleure option.

(Notez que lorsque je dis rendre une sorte de dictionnaire, je parle au sens figuré plutôt que littéral, c’est-à-dire que je renvoie quelque chose qui est conceptuellement identique à un dictionnaire, comme une liste de paires clé-valeur. Je ne recommanderais pas de retourner directement un dictionnaire ( même si vous utilisez WCF qui prend en charge cela) car il est généralement préférable d’avoir un contrôle total sur le XML que vous renvoyez.)

Le chapitre Génération de code à l’exécution du livre d’Eric Gunnerson (Introduction à C # par un programmeur) contient d’excellentes informations sur ce sujet. Voir page 14 et suivantes en particulier. Il décrit les deux méthodes principales permettant d’obtenir une génération de classe / code dynamic (CodeDOM et l’espace de noms Reflection.Emit). Il aborde également la difficulté et la performance des deux approches. Lisez-le et vous devriez trouver tout ce dont vous pourriez avoir besoin.

La vraie question est la suivante: de quoi avez-vous besoin pour utiliser ces propriétés?

Quels seront les cas d’utilisation? Avez-vous besoin de lier ces propriétés à l’interface utilisateur d’une manière ou d’une autre? En utilisant quel type de technologie? (WPF, Windows Forms?)

Est-ce simplement que vous devez rassembler un ensemble de paires clé / valeur au moment de l’exécution? Alors peut-être qu’un simple dictionnaire ferait l’affaire.

Si vous le pouvez, donnez des précisions sur ce dont vous avez besoin. Je suis sûr que les gens ici peuvent vous proposer de nombreuses façons de vous aider, mais il est difficile de donner une bonne réponse sans davantage de contexte.