Dato il nuovo supporto dinamico in C# 4, è possibile scrivere una classe in modo tale che se un metodo viene richiamato su un istanza e quel metodo non è presente, la spedizione è passata ad un altro metodo? Questo potrebbe essere simile:Gestione di un metodo C# non definito su un oggetto dinamico (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.
Altre lingue chiamerebbe questo "supporto method_missing", sotto il titolo più generale di metaprogrammazione. Non sono sicuro di ciò che C# chiama specificamente. Ma è possibile?
Wow, grazie Jon! –
Ho accennato a questo nel mio titolo ma non l'ho chiesto direttamente nel corpo: esiste un override simile che userei per simulare un metodo "responds_to"? Vedo che posso controllare il risultato di TryInvokeMember, ma che potrebbe causare effetti collaterali indesiderati. –
No, non credo che ci sia un modo per chiedere un metodo dinamico se gestirà qualcosa, anche se potresti chiamare GetDynamicMemberNames come punto di partenza. –