Medir la cantidad de métodos en una clase
Frecuentes
Visto 213 veces
1
Se supone que debo contar la cantidad de métodos en una clase de cualquier programa .NET. Para esto estoy haciendo uso del il de ese programa en particular. Inicialmente pensé que contaría el número de "ret" en el il. Pero luego descubrí que incluso las declaraciones de métodos consisten en la palabra clave "ret". Entonces traté de ir con "callvirt". Pero esto no funcionaría en todos los casos. Ahora estoy pensando en algo como esto: -
Cuente el número de veces que aparece lo siguiente en el il:- fin del método class_name::method_name
pero no sé cómo implementar esto (soy un novato en .NET)
¿Puede sugerir amablemente una forma alternativa de identificar un método en una clase haciendo uso de il?
3 Respuestas
2
Mis métodos preferidos:
Método 1:
Cargue el ensamblaje en su AppDomain y use la reflexión. Esto ejecuta el código del ensamblado (es decir, no debería ser malo), y sus dependencias también deben poder resolverse.
Método 2:
Cargue el ensamblado que contiene la clase en Mono.Cecil y luego simplemente enumere los métodos usando su API.
Cuál de los dos elegir depende del contexto. Si ha cargado/cargará el ensamblaje de todos modos, utilice la reflexión. Si solo desea analizar un archivo de ensamblaje, use Mono.Cecil.
Otros metodos:
Método 3:
Utilice la herramienta CCI, no tengo experiencia con este. Se parece a Mono.Cecil.
Método 4:
Utilice carga de ensamblaje de solo reflexión con reflexión. Encontré que este es doloroso, y recomiendo no usarlo.
respondido 10 mar '12, 12:03
0
Dos formas de hacer esto:
//with an instance of the class
var instance = new YourClass();
var methods = instance.GetType().GetMethods();
var count = methods.Length;
//using the type of the class (no instance)
var classType = typeof(YourClass);
var methods = classType.GetMethods();
var count = methods.Length;
He escrito esto en varios pasos para que sea comprensible. Por supuesto que puedes escribirlo en una línea. Por ejemplo, el segundo método se ve así:
var count = typeof(YourClass).GetMethods().Length;
¡Espero que esto ayude! :)
respondido 10 mar '12, 11:03
0
Como está hablando de IL, supongo que desea contar la cantidad de métodos en un ensamblaje compilado.
Puede cargar su ensamblaje .Net y luego usar la reflexión para recuperar todos los métodos.
contestado el 23 de mayo de 17 a las 13:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas .net or haz tu propia pregunta.
Intenté usar esto, pero por alguna razón está dando un conteo incorrecto: pavani gaddam
¿Cuál es el número de métodos reales y cuál es el resultado del método que propuse? - Abbas
¿Cuáles son los métodos que obtienes? Tal vez también esté contando los métodos de la clase 'objeto' ya que todas las clases se derivan de esta clase base.. - Abbas
es solo dar la cuenta y nada más. Entonces, ahora, en lugar de usar el il, estoy usando el programa con una lógica diferencial :) - pavani gaddam
Por supuesto, está devolviendo el número, si elimina la 'Longitud' obtendrá los métodos en sí ... :) - Abbas