2011-10-21 9 views
6

Czy istnieje sposób (odbicie lub inne), aby programowo określić, że interfejs IList wymaga ICollection, co z kolei wymaga IEnumerable?Czy mogę określić programowo wymagania/zależności/dziedziczenie interfejsu?

Pracuję nad reflection library i natknąłem się na scenariusz, w którym mogłem wykorzystać te informacje, ale nie znalazłem sposobu, aby je uzyskać. Zarówno kompilator, jak i IDE (oczywiście) znają relację, więc musi ona być jakoś dostępna.

Mam nadzieję na sugestie, które nie obejmują IL lub parsowania źródła, z których żaden nie jest naprawdę opcja dla mojego przypadku użycia.

+0

Obiekty COM mogą to zrobić. – VoidStar

Odpowiedz

4

Możesz użyć Type.GetInterfaces, aby odkryć te informacje.

+0

Doh! Dzięki, po prostu pokazuje, jak szybko można zapomnieć o czymś, jeśli przez jakiś czas z nią nie pracuje :) –

+0

Wygląda na to, że rekurencja nie jest nawet potrzebna (otrzymuję tablicę z wszystkimi wymaganymi interfejsami). –

+0

@MortenMertner: ... co jeszcze raz potwierdza twój pierwszy komentarz :-) – Jon

1

Przykłady poniżej w PowerShellu:

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

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

Równowartość w C# to: typeof(IList).GetInterfaces().

Powiązane problemy