4

考虑以下代码:

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

是否可以获得静态方法所在类的名称?由于我使用的是静态方法,因此无法使用 this 指针来检索我当前正在使用的对象的类型。

4

4 回答 4

17

尝试以下

return typeof(MyClass).Name;

或者也

return MethodBase.GetCurrentMethod().DeclaringType.Name;
于 2009-07-02T12:41:37.493 回答
2

你可以这样做...

String className = typeof(MyClass).Name;
于 2009-07-02T12:42:14.700 回答
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”。因此,动态查找类名将得到与在字符串中输入完全相同的结果。我可以看到通过反射获得它的唯一好处是,如果你重命名类,它仍然会呈现正确的结果。

于 2009-07-02T12:57:44.293 回答
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”=)

于 2009-07-02T12:44:04.913 回答