Étant donné le nouveau support dynamique dans C# 4, est-il possible d'écrire une classe de telle manière que si une méthode est invoquée sur un instance et cette méthode n'est pas présent, dispatch est passé à une autre méthode? Cela pourrait ressembler à:Gestion d'une méthode C# qui n'est pas définie sur un objet dynamique (aka respond_to/method_missing)
public class Apple : ... {
// ...
private ... MethodMissing(string name, ...) {
if (name == "TurnIntoOrange") {
// do something
}
}
}
dynamic d = new Apple();
d.TurnIntoOrange(); // Not actually defined on Apple; will pass to MethodMissing.
Autres langues appelleraient ce « soutien method_missing », sous la rubrique plus générale de métaprogrammation. Je ne suis pas sûr de ce que C# appelle cela spécifiquement. Mais est-ce possible?
Wow, merci Jon! –
J'ai fait allusion à cela dans mon titre mais je ne l'ai pas directement demandé dans le corps: Y at-il un remplacement similaire que j'utiliserais pour imiter une méthode "responds_to"? Je vois que je peux vérifier le résultat de TryInvokeMember, mais cela pourrait entraîner des effets secondaires indésirables. –
Non, je ne crois pas qu'il existe un moyen de demander à une méthode dynamique si elle va gérer quelque chose - bien que vous puissiez appeler GetDynamicMemberNames comme point de départ. –