Wenn Sie ein Klassenfahrzeug haben, das IVehicle implementiert und es in einen Dekorateur wickeln will, der alle Anrufe an das Auto weiterleitet und diese zählt, wie würden Sie es tun?Was ist der kürzeste Weg, um eine Proxy oder Decorator-Klasse in C# zu implementieren?
In Ruby konnte ich einfach einen Dekorateur ohne Methoden bauen und method_missing verwenden, um alle Aufrufe an das Autoobjekt weiterzuleiten.
In Java konnte ich ein Proxy-Objekt erstellen, das den gesamten Code über eine Methode ausführt und anschließend weiterleitet.
Gibt es eine ähnliche Sache, die ich in C# machen kann?
Update:
basierend auf dem answeres und was Ive über System.Reflection.Emit lesen sollte es möglich sein, ein Verfahren ähnlich zu, dies zu schreiben:
Type proxyBuilder(Type someType, delagate functionToBeApplied, Object forward)
wo Typen implementiert die gesamte Schnittstelle von someType, führt functionToBeApplied aus und leitet den Methodenaufruf an das Objekt weiter, während die Rückgabe zurückgegeben wird.
Gibt es eine Lib, die genau das tut oder müsste ich meine eigene schreiben?
Bitte erläutern Sie in einigen Worten, was bedeutet "Verwendung der' FooBase' ist strikt optional "? Ist es ein Prädikat, dass "irgendein" IFoo "erlaubt ist?" Semikolon lässt mich die Anweisung (en) getrennt lesen und das Argument ist autark, um die Verwirrung hinzuzufügen. trotz cpt. Offensichtliches Flüstern: "Es bedeutet nur, dass' FooBase' durch irgendein anderes 'IFoo' ersetzt werden kann, indem' IFoo' in einer Weise implementiert wird, wie 'FooBase' es tut, ich werde enttäuscht sein, wenn es so einfach ist. nicht enttäuscht von der Antwort, die gut ist, aber eher mit meinem Paranoya. Entschuldigung für "Ausführlichkeit" (jetzt muss ich Idiom finden, dieses Phänomen entsprechend) –
Ich denke, es ist Ihre enttäuschende Antwort; der Code sollte nur von "IFoo" abhängen; 'FooBase' ist nur eine Annehmlichkeit für Code, der' IFoo' implementiert. –
danke!Wenn du Zeit hast, beantworte bitte noch zwei weitere Fragen: ** 1) ** dieses Thema ist schon 6 Jahre alt, sieht danach aus wie sich nichts geändert hat und die Lösungswege sind immer noch gleich? * (dachte nie, ich werde C++ vermissen, aber es hat '->' Überladung) * ** 2) ** irre ich es: Sie sagen, dass es eine schlechte Übung ist, von abstrakten Klassen zu erben? Ich selbst betrachte sie als Schnittstellen zur Standardimplementierung und sie sind sehr praktisch. und kann scheinbar auf 'SomeFoo'-Instanzen als' IFoo' verweisen. * (In der Zwischenzeit implementierte ms den Polymorphismus der Erweiterungsmethoden.) * –