国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET中實現獲取調用方法名_.Net教程

2024-07-10 12:52:50
字體:
來源:轉載
供稿:網友

推薦:ASP.NET中MVC從后臺控制器傳遞數據到前臺視圖的方式
需要添加相應的命名空間: 復制代碼 代碼如下: using System; using System.Diagnostics; using System.Reflection; 如果僅是獲取當前方法名,可以使用如下代碼: 代碼如下: public static void WriteSysLog(int level, string content) { MethodBase mb = MethodBase.

   需要添加相應的命名空間:

  復制代碼 代碼如下:

  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 查看。

  使用反射可以遍歷獲得類的所有屬性名,方法名,成員名,其中一個有趣的小例子:通過反射將變量值轉為變量名本身。

分享:.net使用自定義類屬性實例
一般來說,在.net中可以使用Type.GetCustomAttributes獲取類上的自定義屬性,可以使用PropertyInfo.GetCustomAttributes獲取屬性信息上的自定義屬性。 下面以定義一個簡單數據庫表的映射實體類來說明相關的使用方法,基于自定義類屬性和自定義類中的屬性的自定義屬性,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥棱县| 乐都县| 寿阳县| 驻马店市| 萍乡市| 高碑店市| 上虞市| 黔南| 通化县| 大足县| 汤阴县| 望城县| 平昌县| 乌鲁木齐市| 西城区| 上林县| 施秉县| 榆中县| 平昌县| 垣曲县| 光山县| 金湖县| 太保市| 锡林郭勒盟| 密山市| 达州市| 浙江省| 蒲城县| 新绛县| 娱乐| 安国市| 衡水市| 涪陵区| 浦北县| 安仁县| 无极县| 德庆县| 双辽市| 桐柏县| 宜良县| 子洲县|