variable utilizar una otro otra metodos metodo llamar importar funciones formulario ejemplos como clases clase c# .net logging reflection .net-assembly

c# - utilizar - ¿Cómo determinar el método de llamada y el nombre de clase?



metodos y funciones en c# (3)

Esta pregunta ya tiene una respuesta aquí:

Actualmente estoy desarrollando una biblioteca de registro de aplicaciones usando el TraceListener incorporado. Esta biblioteca se usará en muchos proyectos y debería ofrecer una interfaz simple en la que solo deba preocuparme por QUÉ se va a escribir en el archivo de registro, pero no cómo.

Al utilizar el espacio de nombre de reflexión, puedo averiguar qué aplicación actualmente se llama función de registro (recuperar el nombre del ensamblado de ejecución), pero también quiero el nombre de la función y la clase que llamó a la función de registro.

Digamos que tengo:

public static void LogInfo(string vLogText) { Trace.WriteLine( MethodInfo.GetCurrentMethod().Name + this.GetType().ToString() + vLogText); }

Cuando llamo desde otro proyecto (clase: TestClass, método: TestMethod)

Tracer.LogInfo("log this!")

Espero ver en el registro:

TestClass, TestMethod, log this!

Pero en cambio tengo

TracerClass, LogInfo, log this!

¿Cómo obtener el método padre y el nombre de clase?


Intenta hacer algo como esto:

var mth = new StackTrace().GetFrame(1).GetMethod(); var cls = mth.ReflectedType.Name; // where 1 illustrates how deep into the stack to reflect.

Hay soluciones más elegantes en C # 5.0>, sin embargo, si está usando frameworks anteriores, lo anterior ayudará.


Los últimos C # y VS 2012 se incluyen con la información de llamadas (a saber, CallerLineNumberAttribute , CallerLineNumberAttribute y CallerMemberNameAttribute ), que lo ayudarán si solo puede usarlo.

Si no puede, tendrá que referirse a otras respuestas.


Puede simplemente registrar el seguimiento completo de la pila en lugar de solo el método de llamada utilizando Environment.StackTrace . Esto puede ayudarlo si desea usar la misma estructura de registro para registrar excepciones.

Consulte esta página msdn para más información.