Widziałem podobne pytania/odpowiedzi dla tego zamieszczonego w przeszłości, ale moje różni się nieco od innych, które widziałem.Dynamiczny wybór metody opartej na parametrze wykonawczym typ
Zasadniczo mam wspólny interfejs i kilka klas, które implementują/dziedziczą z niego. Następnie, w osobnej klasie, mam metody, które muszą działać na obiektach podanych przez interfejs IObject. Jednak każdy z nich musi być realizowany na różne sposoby, dlatego istnieje osobna deklaracja metody dla każdego konkretnego typu, która rozszerza IObject.
class IObject
{
...
}
class ObjectType1 : IObject
{
...
}
class ObjectType2 : IObject
{
...
}
class FooBar
{
void Foo (ObjectType1 obj);
void Foo (ObjectType2 obj);
}
Teraz dla mnie oczywistym rozwiązaniem jest wykorzystać dynamiczne wiązanie poprzez umieszczenie metoda Foo wewnątrz poszczególnych klas, które automatycznie wybrać przy starcie prawidłowe Foo do wykonania. Jednak jest to opcja tutaj , a nie, ponieważ definiuję wiele modeli działania na tych obiektach i wolałbym raczej enkapsulować każdy indywidualny model do obsługi obiektów w jego własnej klasie, niż wrzucać wszystkie modele do klasy obiektów.
Znalazłem this post, który pokazuje, jak używać słownika do dynamicznego wybierania w czasie wykonywania poprawnej implementacji metody. W porządku z tym podejściem; jednak przypuśćmy, że muszę wykonać taką ekspedycję w każdym modelu. Jeśli mam tylko IObject i jego konkretne implementacje, czy istnieje sposób uogólnienia tego podejścia, tak żebym mógł nazwać metody o dowolnej nazwie w oparciu o typ środowiska wykonawczego obiektów?
Wiem, że jest to prawdopodobnie niejasne pytanie, ale byłbym wdzięczny za każdą pomoc.
To jest właściwa odpowiedź, myślę. – Ziffusion
Oh wow, jeśli zachowuje się tak, jak wygląda, to jest wspaniałe! Będę się trochę bawił, gdy dostanę jakąś szansę, ale dzięki za to rozwiązanie. W moim kodzie skupiam się na czytelności i łatwej konserwacji, więc wygląda to naprawdę niesamowicie. – TSM