Pregunta

Considere el siguiente código:

public class MyClass
{
     public static string MyStaticMethod()
     {
          //string className = GetClassNameHere...
     }
}

¿Es posible obtener el nombre de la clase en la que reside el método estático? Debido al hecho de que im usando un método estático, no es posible utilizar el este puntero para recuperar el tipo de objeto que im actualmente trabajando.

¿Fue útil?

Solución

Pruebe lo siguiente

return typeof(MyClass).Name;

O también

return MethodBase.GetCurrentMethod().DeclaringType.Name;

Otros consejos

Puede hacer esto ...

String className = typeof(MyClass).Name;

Me puede faltar totalmente el punto aquí, pero lo que está mal con la cadena "MyClass"?

public class MyClass
{
     public static string MyStaticMethod()
     {
          string className = "MyClass";
          Console.WriteLine(className);
     }
}

Es posible argumentar que si se hereda MiClase, le gustaría que el nombre de la clase heredada en su lugar. A continuación, considere lo siguiente:

public class MyClass
{
    public static string MyStaticMethod()
    {
        string className = typeof(MyClass).Name;
        Console.WriteLine(className);
    }
}
public class MyOtherClass : MyClass{ }

Ahora, ¿qué cree que va a ver en la consola si se invoca MyOtherClass.SomeMethod? La respuesta es "MyClass". Por lo tanto, buscar el nombre de la clase dinámicamente le dará el mismo resultado exacto que simplemente escribiendo en una cadena. El único aspecto positivo que puedo ver con conseguir a través de la reflexión es que todavía hará que el resultado correcto si cambia el nombre de la clase.

Prueba esto:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MethodBase m = MethodInfo.GetCurrentMethod();
            MemberInfo info = (MemberInfo)m;
            Console.WriteLine(info.DeclaringType.FullName);
            Console.ReadKey();
        }
    }
}

La consola mostrará "ConsoleApplication1.Program" =)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top