有没有返回当前类/方法名称的函数?
在C#中,是否有一个返回当前类/方法名称的函数?
当前class级名称:
this.GetType().Name;
当前方法名称:
using System.Reflection; // ... MethodBase.GetCurrentMethod().Name;
由于您正在将其用于日志logging目的,因此您可能也有兴趣获取当前的堆栈跟踪 。
System.Reflection.MethodBase.GetCurrentMethod()
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
我把上面的例子改成了这个实例代码:
public class MethodLogger : IDisposable { public MethodLogger(MethodBase methodBase) { m_methodName = methodBase.DeclaringType.Name + "." + methodBase.Name; Console.WriteLine("{0} enter", m_methodName); } public void Dispose() { Console.WriteLine("{0} leave", m_methodName); } private string m_methodName; } class Program { void FooBar() { using (new MethodLogger(MethodBase.GetCurrentMethod())) { // Write your stuff here } } }
输出:
Program.FooBar enter Program.FooBar leave
是! MethodBase类的静态GetCurrentMethod将检查调用代码以查看它是一个构造函数还是一个常规方法,并返回一个MethodInfo或一个ConstructorInfo。
这个命名空间是reflectionAPI的一部分,所以你可以基本上发现运行时可以看到的所有东西。
在这里您可以find关于API的详尽描述:
http://msdn.microsoft.com/en-us/library/system.reflection.aspx
如果你不想看整个图书馆,这是我捏造的一个例子:
namespace Canvas { class Program { static void Main(string[] args) { Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod()); DiscreteMathOperations viola = new DiscreteMathOperations(); int resultOfSummation = 0; resultOfSummation = viola.ConsecutiveIntegerSummation(1, 100); Console.WriteLine(resultOfSummation); } } public class DiscreteMathOperations { public int ConsecutiveIntegerSummation(int startingNumber, int endingNumber) { Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod()); int result = 0; result = (startingNumber * (endingNumber + 1)) / 2; return result; } } }
这个代码的输出是:
Void Main<System.String[]> // Call to GetCurrentMethod() from Main. Int32 ConsecutiveIntegerSummation<Int32, Int32> //Call from summation method. 50 // Result of summation.
希望我帮助你!
JAL
你可以得到当前的类名,但我不能想到得到当前的方法名。 但是,可以获得当前方法的名称。
string className = this.GetType().FullName; System.Reflection.MethodInfo[] methods = this.GetType().GetMethods(); foreach (var method in methods) Console.WriteLine(method.Name);