C# 取得當前使用類別資訊(類別、方法)及呼叫方之資訊

  • 11549
  • 0

C# 取得當前使用類別資訊(類別、方法)及呼叫方之資訊

在C#裡面如果要取得執行程式當下的相關資訊(目前想到寫LOG檔的時候可以用到)

可分為兩種方式,以下為練習的code

GetCurrentMethodInfo的作法是取得目前正在執行Function的相關資訊

GetParentInfo,則是可以取到父類別的資訊,如果我直接在共用的LogClass內取目前出錯的相關資訊,可參考這個寫法,可正確抓到目前真正出錯的Function 資訊

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace DempReflection
{
    class MethodInfo
    {
        /// <summary>
        /// 取得 目前正在執行的 Function Info 資訊
        /// </summary>
        /// <returns></returns>
        public static String GetCurrentMethodInfo()
        {
            string showString = "";
            //取得當前方法類別命名空間名稱
            showString += "Namespace:" + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace + "\n";
            //取得當前類別名稱
            showString += "class Name:" + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + "\n";
            //取得當前所使用的方法
            showString += "Method:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\n";

            return showString;
        }

        /// <summary>
        /// 取得父類別的相關資訊(共用的Functiond可用)
        /// </summary>
        /// <returns></returns>
        public static String GetParentInfo()
        {
            String showString = "";
            StackTrace ss = new StackTrace(true);
            //取得呼叫當前方法之上一層類別(GetFrame(1))的屬性
            MethodBase mb = ss.GetFrame(1).GetMethod();

            //取得呼叫當前方法之上一層類別(父方)的命名空間名稱
            showString += mb.DeclaringType.Namespace + "\n";

            //取得呼叫當前方法之上一層類別(父方)的function 所屬class Name
            showString += mb.DeclaringType.Name + "\n";

            //取得呼叫當前方法之上一層類別(父方)的Full class Name
            showString += mb.DeclaringType.FullName + "\n";

            //取得呼叫當前方法之上一層類別(父方)的Function Name
            showString += mb.Name + "\n";

            return showString;
        }
    }
}

呼叫的方式也紀錄一下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DempReflection
{
    class Program
    {
        static void Main(string[] args)
        {

            String methidInfo = MethodInfo.GetCurrentMethodInfo();

            Console.WriteLine(methidInfo);

            Console.WriteLine();

            String strStackTrace = DempReflection.MethodInfo.GetParentInfo();

            Console.WriteLine(strStackTrace);

            Console.ReadLine();
        }
    }
}