Visualisez la situation suivante. J'ai un document XML comme suit,Coulée dynamique en C#
<Form>
<Control Type="Text" Name="FirstName" />
<Control Type="DateTime" Name="DateOfBirth" />
<Control Type="Text" Name="PlaceOfBirth" />
</Form>
J'ai une classe abstraite appelée contrôle avec une seule méthode abstraite appelée processus qui prend un seul paramètre de HttpRequest. J'ai également deux autres classes qui sont dérivées de contrôle appelé TextControl et DateTimeControl. Text et DateTime remplacent la méthode Process pour fournir leurs propres implémentations.
J'ai aussi une classe Form qui a une méthode Process prenant un seul paramètre de type HttpRequest, et un constructeur qui prend un seul paramètre de type XmlDocument.
Une nouvelle instance de Form est créée et le XML ci-dessus est transmis via le paramètre XmlDocument (la manière dont nous obtenons de la chaîne vers un XmlDocument n'est pas pertinente). J'appelle ensuite la méthode Process sur l'instance de la forme que je viens de créer et passe un paramètre de type HttpRequest comme attendu.
Tout va bien jusqu'ici. Maintenant sur la question.
Pour rendre le traitement des contrôles extensible, j'aimerais pouvoir mapper les classes aux types de contrôle.
par ex.
Form.RegisterControl("Text", Text)
Form.RegisterControl("DateTime", DateTimeControl)
Dans la méthode du processus de la forme que je voudrais itterate sur chaque nœud de contrôle dans le document (comment le faire est à nouveau hors de propos) et instancier une instance de la classe qui correspond à son type en fonction des classes enregistrées par notre méthode RegisterControl. Je serais capable à ce stade de spécifier qu'ils sont dérivés de Control mais ne peuvent pas spécifier explicitement leur type. Parce qu'ils sont tous deux dérivés de contrôle, je veux appeler la méthode de processus qui, je sais, sera mis en œuvre.
Est-ce encore possible? Si oui, comment pourrais-je y aller?
Merci Jon! La première réponse devrait être correcte (vous avez supposé correctement). Je craque maintenant! –
Merci Jon, cela a parfaitement fonctionné. –