考虑下面的代码返回类名称:其中一个静态方法所在
public class MyClass
{
public static string MyStaticMethod()
{
//string className = GetClassNameHere...
}
}
是否有可能获得其中的静态方法所在的类的名称?由于是即时通讯使用的是静态方法事实上,这是不可能使用this指针来检索,即时通讯目前在工作对象的类型。
考虑下面的代码返回类名称:其中一个静态方法所在
public class MyClass
{
public static string MyStaticMethod()
{
//string className = GetClassNameHere...
}
}
是否有可能获得其中的静态方法所在的类的名称?由于是即时通讯使用的是静态方法事实上,这是不可能使用this指针来检索,即时通讯目前在工作对象的类型。
请尝试以下
return typeof(MyClass).Name;
或者也
return MethodBase.GetCurrentMethod().DeclaringType.Name;
击败我! :) – 2009-07-02 13:11:40
你可以这样做......
String className = typeof(MyClass).Name;
试试这个:
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” =)
OP正在寻找类名称,而不是方法名称。 – JaredPar 2009-07-02 12:44:38
我可能会错过了点完全在这里,但有什么不对字符串“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获得唯一的优点是,如果您重命名类,它仍然会呈现正确的结果。
请详细说明“这个指针”是什么意思 – abhilash 2009-07-02 12:42:42
@AB Kolan:我假设罗素引用关键词“this”。 – 2009-07-02 12:45:24