Ho visto domande/risposte simili per questo postate in passato, ma le mie differiscono leggermente dalle altre che ho visto.Selezione dinamica del metodo in base al tipo di parametro runtime
In sostanza, ho un'interfaccia comune e diverse classi che implementano/ereditano da esso. Quindi, in una classe separata, ho metodi che devono agire sugli oggetti dati dall'interfaccia IObject. Tuttavia, ognuno di essi deve essere interpretato in modi diversi, quindi perché esiste una dichiarazione separata del metodo per ogni tipo concreto che estende IObject.
class IObject
{
...
}
class ObjectType1 : IObject
{
...
}
class ObjectType2 : IObject
{
...
}
class FooBar
{
void Foo (ObjectType1 obj);
void Foo (ObjectType2 obj);
}
Ora, per me, una soluzione ovvia è quello di approfittare di binding dinamico posizionando il metodo Foo all'interno di ogni singola classe, che avrebbe scelto automaticamente in fase di esecuzione e la correttezza Foo da eseguire. Tuttavia, questo è non un'opzione qui, perché sto definendo più modelli su come agire su questi oggetti, e preferisco incapsulare ogni singolo modello per gestire gli oggetti nella sua stessa classe, piuttosto che inserire tutti i modelli nel classi di oggetti.
Ho trovato il post this che mostra come utilizzare un dizionario per scegliere dinamicamente in fase di esecuzione l'implementazione del metodo corretto. Sto bene con questo approccio; tuttavia, supponiamo di dover eseguire una spedizione come questa una volta in ogni modello. Se ho solo IObject e le sue implementazioni concrete, c'è un modo per generalizzare questo approccio in modo da poter chiamare i metodi di qualsiasi nome in base al tipo di runtime degli oggetti?
So che questa è probabilmente una domanda poco chiara, ma apprezzerei molto qualsiasi aiuto.
Questa è la risposta giusta, penso. – Ziffusion
Oh wow, se questo si comporta come sembra, allora è magnifico! Mi divertirò un po 'quando avrò qualche possibilità, ma grazie per questa soluzione. L'attenzione nel mio codice è sulla leggibilità e manutenzione facile, quindi questo sembra piuttosto sorprendente. – TSM