2010-01-31 14 views
10

using System.Reflection, puedo conseguir todos los métodos de una clase específica¿Cómo puedo conseguir toda referencia con la reflexión + C#

Necesito saber cuáles son las referencias a estos métodos. Por ejemplo: en Visual Studio, si desea que las referencias de objeto específico

  • clic derecho sobre el objeto y seleccionar "Buscar todas las referencias"
  • Visual Studio muestra las referencias de este objeto seleccionado

Quiero hacer lo mismo, pero desde el código con la reflexión o de otra manera.

¿Puedo hacer esto?

+4

** ¿Por qué ** están votando las personas esta pregunta? Está lleno de errores tipográficos y gramaticales, y está pidiendo hacer algo que, en el mejor de los casos, casi no tiene ningún propósito práctico (a menos que intentes reinventar Reflector) y muy probablemente te lleve a su propio artículo de DailyWTF en un futuro lejano. – Aaronaught

+0

@Aaronaught Up-VotdEd solo para ti :) –

+1

@Aaronaught (y los que votaron positivamente por su comentario) el mal "engrish" también me molesta, pero a través de mis años de pasar el rato en el intercambio de fichas he descubierto que el apropiado Lo que se debe hacer en estos casos se considera que es editar la pregunta para arreglar el "engrish" en lugar de quejarse. –

Respuesta

5

Esto no se puede hacer con reflexión. Reflection es una herramienta para inspeccionar metadatos y ensamblajes. Para encontrar todas las referencias a un método/tipo dado, necesitaría inspeccionar el IL subyacente de un ensamblaje. La reflexión solo tiene capacidades de IL muy limitadas (simplemente la devuelve como una matriz de bytes). Deberá inspeccionar a medida esa secuencia de bytes para recopilar cualquier contexto sobre lo que hace referencia.

+1

¿sabes cómo puedo hacerlo? ¿... o tienes algún ejemplo de código? ... Gracias. –

+1

Oh genial, es otro "por favor envía el código". – Aaronaught

2

No es algo a lo que se pueda acceder directamente a través de la reflexión en tiempo de ejecución en una clase específica. Tendrá que introspectar todo el árbol del código fuente o IL resultante para determinar si las referencias a un método en particular con el mismo nombre son la sobrecarga y la firma correcta para el método al que está tratando de encontrar referencias.

Además, sin trabajo adicional, nunca encontrará referencias a un método específico que se invoque a través de la reflexión. (Esta es una razón por la que ofuscar ese tipo de código es desafiante y propenso a errores.)

0

Microsoft dio a conocer los proyectos Common Compiler Infrastructure bajo una licencia de código abierto. Estos proyectos apuntan a soportar muchas características relacionadas con el compilador, incluido el análisis de ensamblaje como lo que usted se refiere. La documentación es limitada, por lo que deberá tener un conocimiento completo de ECMA-335 (Common Language Infrastructure) para utilizarla de manera efectiva para sus fines.

No hay ejemplos de código mágico aquí. Esta es una tarea grande y bastante complicada en la que estarás solo la mayor parte del camino.

Cuestiones relacionadas