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