程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .NET 中獲取調用方法名,.net獲取調用方法

.NET 中獲取調用方法名,.net獲取調用方法

編輯:C#入門知識

.NET 中獲取調用方法名,.net獲取調用方法


在寫記錄日志功能時,需要記錄日志調用方所在的模塊名、命名空間名、類名以及方法名,想到使用的是反射(涉及到反射請注意性能),但具體是哪一塊兒還不了解,於是搜索,整理如下:

  需要添加相應的命名空間:   using System; using System.Diagnostics; using System.Reflection; 如果僅是獲取當前方法名,可以使用如下代碼:   復制代碼 public static void WriteSysLog(int level, string content) {     MethodBase mb = MethodBase.GetCurrentMethod();     string systemModule = Environment.NewLine;     systemModule += "模塊名:" + mb.Module.ToString() + Environment.NewLine;     systemModule += "命名空間名:" + mb.ReflectedType.Namespace + Environment.NewLine;     //完全限定名,包括命名空間     systemModule += "類名:" + mb.ReflectedType.FullName + Environment.NewLine;     systemModule += "方法名:" + mb.Name;       Console.WriteLine("LogDate: {0}{1}Level: {2}{1}systemModule: {3}{1}content: {4}", DateTime.Now, Environment.NewLine, level, systemModule, content);     Console.WriteLine(); } 復制代碼 本文地址:http://www.cnblogs.com/Interkey/p/GetMethodName.html 但一般情況下是獲取此記錄日志方法的調用方,因此需要使用下面的代碼:(此方法僅為演示)   復制代碼 public static void WriteSysLog(string content) {     const int level = 1000;       StackTrace ss = new StackTrace(true);     //index:0為本身的方法;1為調用方法;2為其上上層,依次類推     MethodBase mb = ss.GetFrame(1).GetMethod();       //本文地址:http://www.cnblogs.com/Interkey/p/GetMethodName.html     StackFrame[] sfs = ss.GetFrames();     string systemModule = Environment.NewLine;     systemModule += "模塊名:" + mb.Module.ToString() + Environment.NewLine;     systemModule += "命名空間名:" + mb.DeclaringType.Namespace + Environment.NewLine;     //僅有類名     systemModule += "類名:" + mb.DeclaringType.Name + Environment.NewLine;     systemModule += "方法名:" + mb.Name;       Console.WriteLine("LogDate: {0}{1}Level: {2}{1}systemModule: {3}{1}content: {4}", DateTime.Now, Environment.NewLine, level, systemModule, content);     Console.WriteLine(); } 復制代碼 對於這一點兒,感覺有意思的是Main的調用方,System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)。   通過   StackTrace ss = new StackTrace(true); StackFrame[] sfs = ss.GetFrames(); 可以得知.NET程序的執行順序:   System.Threading.ThreadHelper.ThreadStart() System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 然後進入方法Main中。     另外,從 MethodBase 類 還可以獲取很多其他屬性,可以自行定位到System.Reflection.MethodBase 查看。   使用反射可以遍歷獲得類的所有屬性名,方法名,成員名,其中一個有趣的小例子:通過反射將變量值轉為變量名本身 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved