Como saber nombre de clase desde método estático?

25/01/2004 - 06:42 por Néstor Marcel Sánchez Ahumada | Informe spam
Hola... tengo el siguiente problema ...
necesito entregarle a un objeto el nombre la clase que lo llamó...
lo cual es fácil si hago una llamada como Metodo(
this.GetType().ToString() );
pero como lo hago si la llamada la hago desde un método estático?
pues entonces no podré utilizar "this".

ejemplo:
class Avisador
{
void Avisa( string Mensaje )
{ System.Console.WriteLine( "Llamado por " + Mensaje );
}

class Cliente
{
static Cliente()
{
Avisa( this.GetType() ); // Error... no puedo utilizar "this"
pues este constructor es de clase
}
}

La idea es no tener que poner en duro el nombre de la clase.
De antemano gracias,

Néstor.

Preguntas similare

Leer las respuestas

#1 sergi
25/01/2004 - 13:22 | Informe spam
me parece que no respondí al grupo >_<
bueno, te hice este pequeño ejemplo. Para lo que quieres puedes usar
System.Diagnostics.StackFrame

<code>

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

namespace TraceCaller
{
public class Callee
{
public void Meth()
{
StackFrame sFrame = new StackFrame( 1, true );

MethodBase m = sFrame.GetMethod();

string mName = m.Name;
string cClassName = m.ReflectedType.Name;

Console.WriteLine("método que me llamó : '{0}' de la clase : '{1}'",
mName, cClassName);

}
}
public class Caller
{

public static void CallMeth()
{
Callee c = new Callee();
c.Meth();

}

}
public class Tester
{
static void Main(string[]args)
{
Caller.CallMeth();
Console.Read();
}
}
}
</code>

Un saludo,

Sergio Borràs

"Néstor Marcel Sánchez Ahumada" wrote in message
news:eSC8$
Hola... tengo el siguiente problema ...
necesito entregarle a un objeto el nombre la clase que lo llamó...
lo cual es fácil si hago una llamada como Metodo(
this.GetType().ToString() );
pero como lo hago si la llamada la hago desde un método estático?
pues entonces no podré utilizar "this".

ejemplo:
class Avisador
{
void Avisa( string Mensaje )
{ System.Console.WriteLine( "Llamado por " + Mensaje );
}

class Cliente
{
static Cliente()
{
Avisa( this.GetType() ); // Error... no puedo utilizar "this"
pues este constructor es de clase
}
}

La idea es no tener que poner en duro el nombre de la clase.
De antemano gracias,

Néstor.


Respuesta Responder a este mensaje
#2 Néstor Marcel Sánchez Ahumada
26/01/2004 - 04:04 | Informe spam
Muchas gracias, Sergio :D

"sergi" wrote in message
news:
me parece que no respondí al grupo >_<
bueno, te hice este pequeño ejemplo. Para lo que quieres puedes usar
System.Diagnostics.StackFrame

<code>

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

namespace TraceCaller
{
public class Callee
{
public void Meth()
{
StackFrame sFrame = new StackFrame( 1, true );

MethodBase m = sFrame.GetMethod();

string mName = m.Name;
string cClassName = m.ReflectedType.Name;

Console.WriteLine("método que me llamó : '{0}' de la clase : '{1}'",
mName, cClassName);

}
}
public class Caller
{

public static void CallMeth()
{
Callee c = new Callee();
c.Meth();

}

}
public class Tester
{
static void Main(string[]args)
{
Caller.CallMeth();
Console.Read();
}
}
}
</code>

Un saludo,

Sergio Borràs

"Néstor Marcel Sánchez Ahumada" wrote in message
news:eSC8$
> Hola... tengo el siguiente problema ...
> necesito entregarle a un objeto el nombre la clase que lo llamó...
> lo cual es fácil si hago una llamada como Metodo(
> this.GetType().ToString() );
> pero como lo hago si la llamada la hago desde un método estático?
> pues entonces no podré utilizar "this".
>
> ejemplo:
> class Avisador
> {
> void Avisa( string Mensaje )
> { System.Console.WriteLine( "Llamado por " + Mensaje );
> }
>
> class Cliente
> {
> static Cliente()
> {
> Avisa( this.GetType() ); // Error... no puedo utilizar


"this"
> pues este constructor es de clase
> }
> }
>
> La idea es no tener que poner en duro el nombre de la clase.
> De antemano gracias,
>
> Néstor.
>
>


Respuesta Responder a este mensaje
#3 Tristan
26/01/2004 - 10:18 | Informe spam
Puedes obtener el nombre de la clase en un método static
así:

MethodInfo.GetCurrentMethod().DeclaringType.Name
Respuesta Responder a este mensaje
#4 Néstor Marcel Sánchez Ahumada
27/01/2004 - 02:34 | Informe spam
Muchas gracias, justo lo que buscaba.

"Tristan" wrote in message
news:46ed01c3e3ed$660c6af0$
Puedes obtener el nombre de la clase en un método static
así:

MethodInfo.GetCurrentMethod().DeclaringType.Name
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida