Ich habe ähnliche Fragen/Antworten für diese in der Vergangenheit geschrieben gesehen, aber meins unterscheidet sich leicht von den anderen, die ich gesehen habe.Dynamische Auswahl der Methode basierend auf Laufzeit-Parameter Typ
Im Wesentlichen habe ich eine gemeinsame Schnittstelle und mehrere Klassen, die davon implementieren/erben. Dann habe ich in einer separaten Klasse Methoden, die auf Objekte einwirken müssen, die vom Interface IObject angegeben werden. Auf jeden von ihnen muss jedoch auf unterschiedliche Weise reagiert werden, weshalb es eine separate Deklaration der Methode für jeden konkreten Typ gibt, der IObjekt erweitert.
class IObject
{
...
}
class ObjectType1 : IObject
{
...
}
class ObjectType2 : IObject
{
...
}
class FooBar
{
void Foo (ObjectType1 obj);
void Foo (ObjectType2 obj);
}
Nun zu mir, eine offensichtlichen Lösung ist, indem die Methode Foo innerhalb jeder einzelnen Klasse Vorteile der dynamischen Bindung zu nehmen, die zur Laufzeit automatisch auszuführen, um die richtig Foo wählen würden. Dies ist jedoch eine Option hier, weil ich mehrere Modelle für das Verhalten auf diese Objekte definieren, und ich würde lieber jedes einzelne Modell für die Handhabung von Objekten in seiner eigenen Klasse einkapseln, anstatt alle Modelle in die Objektklassen.
Ich fand this Beitrag, der zeigt, wie man ein Wörterbuch verwendet, um zur Laufzeit die korrekte Methodenimplementierung dynamisch auszuwählen. Mir geht es gut mit diesem Ansatz; Nehmen wir jedoch an, dass ich in jedem Modell einen solchen Versand einmal durchführen muss. Wenn ich nur IObject und seine konkreten Implementierungen habe, gibt es irgendeine Möglichkeit, diesen Ansatz zu verallgemeinern, so dass ich Methoden beliebigen Namens basierend auf dem Laufzeittyp der Objekte aufrufen konnte?
Ich weiß, das ist wahrscheinlich eine unklare Frage, aber ich würde jede Hilfe sehr schätzen.
Das ist die richtige Antwort, denke ich. – Ziffusion
Oh wow, wenn sich das so verhält, wie es aussieht, dann ist das großartig! Ich werde ein wenig herumspielen, wenn ich eine Chance bekomme, aber danke für diese Lösung. Der Fokus in meinem Code liegt auf der Lesbarkeit und einfachen Wartung, so dass dies ziemlich erstaunlich aussieht. – TSM