主頁(yè) > 知識(shí)庫(kù) > ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名

ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名

熱門(mén)標(biāo)簽:百度地圖怎樣做地圖標(biāo)注 征途美甲店地圖標(biāo)注 昆明語(yǔ)音電銷機(jī)器人價(jià)格 太原400電話上門(mén)辦理 浦發(fā)電話機(jī)器人提醒還款 騰訊地圖標(biāo)注手機(jī) 400電話如何申請(qǐng)取消 柳州電銷機(jī)器人公司 電銷語(yǔ)音機(jī)器人型號(hào)參數(shù)

本文實(shí)例講述了ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名的技巧。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

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

 
需要添加相應(yīng)的命名空間:

復(fù)制代碼 代碼如下:
using System;
using System.Diagnostics;
using System.Reflection;

如果僅是獲取當(dāng)前方法名,可以使用如下代碼:
復(fù)制代碼 代碼如下:
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();
}

但一般情況下是獲取此記錄日志方法的調(diào)用方,因此需要使用下面的代碼:(此方法僅為演示)

復(fù)制代碼 代碼如下:
public static void WriteSysLog(string content)
{
    const int level = 1000;
 
    StackTrace ss = new StackTrace(true);
    //index:0為本身的方法;1為調(diào)用方法;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();
}

對(duì)于這一點(diǎn)兒,感覺(jué)有意思的是Main的調(diào)用方

復(fù)制代碼 代碼如下:
System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)

 
通過(guò)
復(fù)制代碼 代碼如下:
StackTrace ss = new StackTrace(true);
StackFrame[] sfs = ss.GetFrames();

可以得知.NET程序的執(zhí)行順序:
復(fù)制代碼 代碼如下:
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)

然后進(jìn)入方法Main中。

另外,從 MethodBase 類 還可以獲取很多其他屬性,可以自行定位到System.Reflection.MethodBase 查看。
 
使用反射可以遍歷獲得類的所有屬性名,方法名,成員名,其中一個(gè)有趣的小例子:通過(guò)反射將變量值轉(zhuǎn)為變量名本身。

希望本文所述對(duì)大家的asp.net程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • asp.net c# 調(diào)用百度pai實(shí)現(xiàn)在線翻譯,英文轉(zhuǎn)中文
  • ASP.NET 調(diào)用百度搜索引擎的代碼
  • ASP.NET中MVC使用AJAX調(diào)用JsonResult方法并返回自定義錯(cuò)誤信息
  • Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例
  • asp.net中IDataParameter調(diào)用存儲(chǔ)過(guò)程的實(shí)現(xiàn)方法
  • 使用asp.net調(diào)用谷歌地圖api示例
  • asp.net調(diào)用飛信免費(fèi)發(fā)短信(測(cè)試有效)
  • Asp.NET調(diào)用百度翻譯的方法

標(biāo)簽:張家界 蘭州 陽(yáng)泉 天門(mén) 新疆 白山 德陽(yáng) 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名》,本文關(guān)鍵詞  ASP.NET,中,實(shí)現(xiàn),獲取,調(diào)用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ASP.NET中實(shí)現(xiàn)獲取調(diào)用方法名的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章