Pergunta

Considere o seguinte código:

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

É possível obter o nome da classe em que reside o método estático? Devido ao fato de que im usando um método estático, não é possível usar a este ponteiro para recuperar o tipo de objeto que im trabalhando atualmente em.

Foi útil?

Solução

Tente o seguinte

return typeof(MyClass).Name;

Ou também

return MethodBase.GetCurrentMethod().DeclaringType.Name;

Outras dicas

Você pode fazer isso ...

String className = typeof(MyClass).Name;

Eu pode estar faltando completamente o ponto aqui, mas o que há de errado com a string "MyClass"?

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

Você pode argumentar que, se MyClass é herdada, você iria querer o nome da classe herdada vez. Então, considere o seguinte:

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

Agora, o que você acha que você vai ver no Console Se você chamar MyOtherClass.SomeMethod? A resposta é "MyClass". Então, olhando para o nome da classe dinamicamente lhe dará exatamente o mesmo resultado que simplesmente digitando-o em uma string. A única vantagem que eu posso ver com a obtenção através da reflexão é que ele ainda irá processar o resultado correto se você mudar o nome da classe.

Tente isto:

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();
        }
    }
}

O console irá mostrar "ConsoleApplication1.Program" =)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top