Ci sono tonnellate di domande su questo argomento, ma ne ho una versione leggermente modificata.Determina se una classe implementa un'interfaccia molto specifica
Abbiamo il seguente codice:
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
Ora, la torsione della storia: il metodo Implements_IFoo
deve solo restituire true quando il tipo IFoo implementa solo e non una qualsiasi delle interfacce derivate da IFoo. Per illustrare ecco alcuni esempi di questo metodo:
Implements_IFoo(typeof(Foo)); // Should return true
Implements_IFoo(typeof(Bar)); // Should return false as Bar type
// implements an interface derived from IFoo
noti che ci possono essere numerose interfacce derivate da IFoo e non necessariamente conoscere la loro esistenza.
Il metodo ovvio è trovare tutte le interfacce derivate da IFoo tramite reflection e quindi controllare solo il tipoof (Bar) .GetInterfaces() è uno di quelli che sono presenti lì. Ma mi stavo chiedendo se qualcuno può trovare una soluzione più elegante.
PS La domanda proviene da un codice che ho trovato che utilizza questo controllo sulle classi (if(obj.GetType() == typeof(BaseClass)) { ... }
). Stiamo sostituendo le classi con le interfacce ora quel particolare codice. Inoltre, nel caso in cui - sto implementando questo controllo come una bandiera booleana, quindi questa domanda è puramente ipotetica.
Sono davvero curioso di sapere perché è necessario questo tipo di introspezione in primo luogo. È probabile che il tuo progetto sia sbagliato. – tdammers
Si prega di leggere la domanda 'fino alla fine prima di commentare la prossima volta - Ho già spiegato che questa è una domanda ipotetica;) – Jefim