2009-07-02 24 views
4

考慮下面的代碼返回類名稱:其中一個靜態方法所在

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

是否有可能獲得其中的靜態方法所在的類的名稱?由於是即時通訊使用的是靜態方法事實上,這是不可能使用this指針來檢索,即時通訊目前在工作對象的類型。

+0

請詳細說明「這個指針」是什麼意思 – abhilash 2009-07-02 12:42:42

+1

@AB Kolan:我假設羅素引用關鍵詞「this」。 – 2009-07-02 12:45:24

回答

17

請嘗試以下

return typeof(MyClass).Name; 

或者也

return MethodBase.GetCurrentMethod().DeclaringType.Name; 
+0

擊敗我! :) – 2009-07-02 13:11:40

2

你可以這樣做......

String className = typeof(MyClass).Name; 
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」 =)

+0

OP正在尋找類名稱,而不是方法名稱。 – JaredPar 2009-07-02 12:44:38

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獲得唯一的優點是,如果您重命名類,它仍然會呈現正確的結果。

相關問題