Compiler morceau de code dynamique et l'ajouter à la classe actuelle
-
27-10-2019 - |
Question
Je veux créer plusieurs propriétés à la volée à l'intérieur du constructeur de la classe et les ajouter à la classe actuelle. Le modèle de la propriété est le suivant
public [PropertyType] [PropertyName]
{
get {return Container.Resolve();}
}
J'ai lu un peu CodeDom et Reflection.Emit mais n'ont pas été en mesure de comprendre comment les utiliser dans ce cas particulier l'utilisation.
Un indice serait grandement apprécié. Merci à l'avance
EDIT: Je l'élaboration du but en raison du nombre de questions ... Je suis en train de mettre en œuvre la classe de base pour un localisateur de modèle de vue. La liaison en XAML est réalisée par référence à une propriété par son chemin, il doit donc être une propriété. Les types et les noms des propriétés à ajouter ne sont connus que lors de l'exécution, donc j'utilise la réflexion pour les obtenir. Bref, je besoin d'un exemple de prendre un morceau de code et la compilation de façon dynamique dans la même classe.
La solution
Si vous êtes en C # 4, vous pouvez utiliser les nouvelles fonctions dynamiques pour cela. Utilisez ExpandoObject
ou DynamicObject
pour ajouter des propriétés dynamiquement à votre objet. Si vous faites référence puis les en XAML, ils seront résolus correctement.
Dans tous les cas, il est impossible de modifier la classe existante. Ce que vous pouvez est de créer une nouvelle classe, qui peut hériter de la classe existante et ajouter les propriétés à cela. Vous devriez être en mesure de se lier à eux de XAML.
Autres conseils
approche alternative:
vous pouvez mettre en œuvre ICustomTypeDescriptor et de fournir les propriétés supplémentaires
Bind vos trucs de XAML à somthing comme xml et xml changement dans l'exécution
Vous pouvez créer calss et hériter de la classe actuelle, la nouvelle classe peut avoir sur les propriétés de la mouche et la fonctionnalité classe de base
oui son look possible prendre à ce aide nécessaire à ajouter de nouvelles méthodes, les propriétés existantes dans classes dynamiquement