2011-10-21 12 views
6

Esiste un modo (riflessione o altro) per determinare in modo programmatico che l'interfaccia IList richieda ICollection, che a sua volta richiede IEnumerable?Posso determinare i requisiti di interfaccia/dipendenze/ereditarietà programmaticamente?

Sto lavorando a uno reflection library e ho trovato uno scenario in cui è possibile utilizzare queste informazioni, ma non ho trovato alcun modo per ottenerlo. Sia il compilatore che l'IDE (ovviamente) conoscono la relazione, quindi devono essere disponibili in qualche modo.

Spero in suggerimenti che non coinvolgano IL o l'analisi di origine, nessuno dei quali è davvero un'opzione per il mio caso d'uso.

+0

Gli oggetti COM possono farlo. – VoidStar

risposta

4

È possibile utilizzare Type.GetInterfaces per scoprire queste informazioni.

+0

Doh! Grazie, mostra solo quanto velocemente si può andare a dimenticare qualcosa se non si lavora con esso per un po ':) –

+0

In realtà, sembra che la ricorsione non sia nemmeno necessaria (ottengo un array con tutte le interfacce richieste). –

+0

@MortenMertner: ... che convalida il tuo primo commento ancora una volta :-) – Jon

1

esempi qui sotto in PowerShell:

PS C:\> [collections.ilist].getinterfaces() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  False ICollection 
True  False IEnumerable 

L'equivalente in C# sarebbero: typeof(IList).GetInterfaces().

Problemi correlati