2011-10-21 15 views
6

¿Existe algún modo (reflejo o no) para determinar programáticamente que la interfaz IList requiere ICollection, que a su vez requiere IEnumerable?¿Puedo determinar requisitos de interfaz/dependencias/herencia de forma programática?

Estoy trabajando en un reflection library y encontré un escenario en el que podría utilizar esta información, pero no encontré la manera de obtenerlo. Tanto el compilador como el IDE (obviamente) conocen la relación, por lo que debe estar disponible de alguna manera.

Espero sugerencias que no impliquen IL o análisis fuente, ninguno de los cuales es realmente una opción para mi caso de uso.

+0

Los objetos COM pueden hacer esto. – VoidStar

Respuesta

4

Puede usar Type.GetInterfaces para descubrir esta información.

+0

Doh! Gracias, simplemente muestra qué tan rápido puedes ir olvidando algo si no trabajas con él por un tiempo :) –

+0

En realidad, parece que la recursión ni siquiera es necesaria (obtengo una matriz con todas las interfaces requeridas). –

+0

@MortenMertner: ... que valida su primer comentario una vez más :-) – Jon

1

Ejemplos a continuación en powershell:

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

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

El equivalente en C# serían: typeof(IList).GetInterfaces().

Cuestiones relacionadas