Dado el nuevo soporte dinámico en C# 4, es posible escribir una clase de tal manera que si se invoca un método en un instancia y ese método no está presente, el envío se pasa a otro método? Esto podría ser algo como:Manejando un método C# que no está definido en un objeto dinámico (también conocido como responder_aliminar/eliminar método)
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.
Otros idiomas llamaría a esto "apoyo method_missing", bajo el título más general de metaprogramming. No estoy seguro de lo que C# llama esto específicamente. ¿Pero es posible?
Wow, gracias Jon! –
Aludí a esto en mi título, pero no lo pregunté directamente en el cuerpo: ¿hay una anulación similar que usaría para imitar un método de "responde a".? Veo que puedo verificar el resultado de TryInvokeMember, pero eso puede provocar efectos secundarios indeseables. –
No, no creo que haya ninguna forma de preguntarle a un método dinámico si manejará algo, aunque podría llamar a GetDynamicMemberNames como punto de partida. –