nome da classe de retorno em que um método estático reside
-
21-08-2019 - |
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.
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" =)