考慮下面的代碼返回類名稱:其中一個靜態方法所在
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