Behandeln einer C # -Methode, die nicht für ein dynamisches Objekt definiert ist (aka respond_to / method_missing)

8

Ist es angesichts der neuen dynamischen Unterstützung in C # 4 möglich, eine Klasse so zu schreiben, dass, wenn eine Methode für eine Instanz aufgerufen wird und diese Methode nicht vorhanden ist, der Dispatch an eine andere Methode übergeben wird? Das könnte etwa so aussehen:

%Vor%

Andere Sprachen würden diese "method_missing support" unter der allgemeineren Überschrift der Metaprogrammierung nennen. Ich bin nicht sicher, was C # das spezifisch nennt. Aber ist es möglich?

    
Kyle Kaitan 10.07.2009, 16:05
quelle

1 Antwort

17

Absolut. Implementieren Sie entweder IDynamicMetaObjectProvider oder leiten Sie sie von DynamicObject für eine viel einfachere Route. In der DLR-Dokumentation finden Sie einige gute Beispiele.

Hier ist ein kurzes Beispiel für DynamicObject :

%Vor%

<plug>

Ich habe ein größeres Beispiel für DynamicObject in der zweiten Ausgabe von C # in Depth , aber ich habe IDyamicMetaObjectProvider noch nicht implementiert. . Ich werde das vor der Veröffentlichung des Buches tun, aber die frühe Zugriffsversion hat momentan nur das Beispiel DynamicObject . BTW, wenn Sie es heute kaufen, ist es der halbe Preis - verwenden Sie den Code twtr0711 . Ich werde diese Antwort später bearbeiten, um dieses Bit zu entfernen:)

</plug>

    
Jon Skeet 10.07.2009, 16:10
quelle

Tags und Links