请考虑以下代码:
public class MyClass
{
public static string MyStaticMethod()
{
//string className = GetClassNameHere...
}
}
是否可以获取静态方法所在的类的名称?由于im使用静态方法,因此无法使用this指针来检索当前正在使用的对象的类型。
答案 0 :(得分:17)
尝试以下
return typeof(MyClass).Name;
或者
return MethodBase.GetCurrentMethod().DeclaringType.Name;
答案 1 :(得分:2)
你可以这样做......
String className = typeof(MyClass).Name;
答案 2 :(得分:2)
我可能完全忽略了这一点,但字符串“MyClass”有什么问题?
public class MyClass
{
public static string MyStaticMethod()
{
string className = "MyClass";
Console.WriteLine(className);
}
}
你可能会争辩说,如果MyClass是继承的,你会想要继承类的名称。然后考虑以下事项:
public class MyClass
{
public static string MyStaticMethod()
{
string className = typeof(MyClass).Name;
Console.WriteLine(className);
}
}
public class MyOtherClass : MyClass{ }
现在,如果您调用MyOtherClass.SomeMethod
,您认为在控制台中会看到什么?答案是“MyClass
”。因此,动态查找类名将为您提供与在字符串中输入完全相同的结果。我通过Reflection得到的唯一好处是,如果重命名该类,它仍将呈现正确的结果。
答案 3 :(得分:1)
试试这个:
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();
}
}
}
控制台将显示“ConsoleApplication1.Program”=)