Nombre del método que ha llamado a otro

21/02/2005 - 11:37 por Chino | Informe spam
Hola!

Si tengo una cadena de llamadas de unos métodos a otros, cómo puedo saber el
nombre del primer método de la cadena? Es posible saberlo?

P.Ej:

void metodo1()
{
metodo2();
}

void metodo2()
{
metodo3();
}

void metodo3()
{
"El nombre del método inicial es metodo1";
}

Muchas gracias,

CHINO

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
21/02/2005 - 15:40 | Informe spam
Saludos,

Consulta la documentacion de la clase System.Diagnostincs.StackTrace.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Chino" escribió en el mensaje
news:
Hola!

Si tengo una cadena de llamadas de unos métodos a otros, cómo puedo saber


el
nombre del primer método de la cadena? Es posible saberlo?

P.Ej:

void metodo1()
{
metodo2();
}

void metodo2()
{
metodo3();
}

void metodo3()
{
"El nombre del método inicial es metodo1";
}

Muchas gracias,

CHINO


Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo, MVP
22/02/2005 - 12:43 | Informe spam
Mientras revisas la documentacion ( :P ), te pongo un pequeño codigo que
habia hecho algunos meses atras, en respuesta a esta misma pregunta:


From: "Pedro Luna Montalvo, MVP"
Newsgroups: microsoft.public.es.csharp
Sent: Friday, January 07, 2005 9:22 AM
Subject: Re: Ensamblados, Pedro Luna


Saludos David,

Pos asi es la vida.asi como la disfrutas..las pagas... que soberana
borrachera sera esa que dura hasta el dis de reyes :)

Ahora, por lo otro. Creo que nos confundimos, pues cuando mencionada a
StackTrace, me referia a la clase StackTrace y no a la propiedad.

Mira el siguiente codigo que hace uso de esta propiedad para recorrer la
pila de llamadas, muestra el nombre del metodo, el tipo donde esta
declarado, y el espacio de nombres de este tipo.

Ademas, si esta disponible, tambien mostrara la ubicacion en el codigo
original donde se origino el salto en la ejecucion.


using System;
using System.Diagnostics;
using System.Reflection;

namespace EspacioNombres1 {

class Tipo1 {

static void Main() {
Metodo1();
}

static void Metodo1() {
TipoSinEspacioNombres.Metodo2();
}

}

}


class TipoSinEspacioNombres {

public static void Metodo2() {
EspacioNombres2.MostrarStackTraceLib.MostrarStackTrace();
}

}

namespace EspacioNombres2 {

class MostrarStackTraceLib {

public static void MostrarStackTrace() {
StackTrace stkTrace = new StackTrace(true);

for (int i = stkTrace.FrameCount - 1; i >= 0; i--) {
string nombreMetodo = "?";
string ubicacionCodigo = "?";
StackFrame stkFrame = stkTrace.GetFrame(i);

// Recuperar el Método y el espacio de nombres al que
pertenece
MethodBase methodBase = stkFrame.GetMethod();
Type typeDeclaringMethod = methodBase.DeclaringType;

if (typeDeclaringMethod != null) {
string nombreTipo = "";

if (typeDeclaringMethod.Namespace != null) {
nombreTipo = typeDeclaringMethod.Namespace + ".";
}

nombreMetodo = nombreTipo + methodBase.Name + "()";
}


// Recuperar inforación de la linea de invocacion (si estpa
disponible)
if (stkFrame.GetILOffset() != -1) {
string nombreArchivo = stkFrame.GetFileName();

if (nombreArchivo != null) {
int lineaActual = stkFrame.GetFileLineNumber();
ubicacionCodigo = nombreArchivo + " en la línea: "
+
lineaActual.ToString();
}
}

Console.WriteLine("{0}. {1}", stkTrace.FrameCount - i,
nombreMetodo);
Console.WriteLine(" {0}", ubicacionCodigo);
Console.WriteLine();
}
}

}
}

Para que la ubicacion dentro del codigo este disponible, compilalo en modo
DEBUG.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida