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();
        }
    }
}