麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

ASP.NET中實現獲取調用方法名

2024-07-10 13:28:37
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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(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 查看。
 
使用反射可以遍歷獲得類的所有屬性名,方法名,成員名,其中一個有趣的小例子:通過反射將變量值轉為變量名本身。

希望本文所述對大家的asp.net程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 请播放一级毛片 | 亚洲精久久 | 成年性羞羞视频免费观看无限 | 欧美日韩爱爱视频 | 91福利免费观看 | 在线a亚洲视频播放在线观看 | 黄视频免费在线观看 | 久草视频国产在线 | 毛片大全免费 | 中日无线码1区 | 欧美在线观看禁18 | 亚洲视频在线视频 | 一区二区三区在线观看免费视频 | 国产女做a爱免费视频 | 欧美另类视频在线 | 国产午夜亚洲精品理论片大丰影院 | 99精品视频久久精品视频 | 超级av在线| 久久精品中文字幕一区二区三区 | 久草在线免费看 | 亚洲视频在线观看免费视频 | 2021国产精品| 亚洲综合中文 | 青青草成人免费视频在线 | 草莓视频在线导航 | 羞羞视频免费网站男男 | 免费国产在线精品 | 91看片在线观看视频 | av电影在线观看网址 | 久久超| 91短视频在线免费观看 | 国产免费久久久久 | 国产亚洲美女精品久久久2020 | 日本在线不卡一区二区三区 | 国内精品伊人久久久久网站 | 亚洲午夜视频 | 最新av在线免费观看 | 黄色特级视频 | 销魂美女一区二区 | 国产精品久久久久久久久久东京 | 在线看一区二区三区 |