好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ASP.NET中实现猎取调用方法名__2.docx

4页
  • 卖家[上传人]:碎****木
  • 文档编号:229352416
  • 上传时间:2021-12-25
  • 文档格式:DOCX
  • 文档大小:10.75KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • ASP.NET 中实现猎取调用方法名_本文实例讲解并描述了 ASP.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();}但一般状况下是猎取此记录日志方法的调用方,因此需要 用法下面的代码:〔此方法仅为演示〕复 制 代 码 代 码 如 下 :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(); 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(Assemblyassembly, String[] args) 通过复 制 代 码 代 码 如 下 :StackTrace ss = new StackTrace(true);StackFrame[] sfs = ss.GetFrames(); 可以得知.NET 程序的执行挨次:复 制 代 码 代 码 如下:System.Threading.ThreadHelper.ThreadStart()System.Threading.ExecutionContext.Run(ExecutionCont ext executionContext, ContextCallback callback, Object state)Microsoft.VisualStudio.HostingProcess.HostProc.RunU sersAssembly()System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)然后进入方法 Main 中。

      另外,从 MethodBase 类 还可以猎取很多其他属性,可以自行定位到 System.Reflection.MethodBase 查看用法反射可以遍历获得类的全部属性名 ,方法名,成员名, 其中一个好玩的小例子:通过反射将变量值转为变量名本身更多信息请查看 IT 技术专栏...。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.