ちょい用事あったので。
ポイントはこんな感じかね?
- StackFrameクラスをインスタンス化する
- フレーム数で階層を指定する
- GetMethodメソッドで取得したオブジェクトのNameプロパティでメソッド名を取得する
- GetMethodメソッドで取得したオブジェクトのReflectedTypeのFullNameプロパティでクラスのフルパスを取得する
namespaceで追加するのはこんなん。
using System.Diagnostics;
んで、コードはこんなん。
public class Sample
{
// 実際にクラス名とメソッド名を取得するメソッド
public static void Function()
{
// StackFrameクラスをインスタンス化する
int nFrame = 1; // フレーム数(1なら直接呼び出したメソッド)
StackFrame objStackFrame = new StackFrame(nFrame);
// 呼び出し元のメソッド名を取得する
string strMethodName = objStackFrame.GetMethod().Name;
System.Console.WriteLine("Method Name is {0}()", strMethodName);
// 呼び出し元のクラス名を取得する
string strClassName = objStackFrame.GetMethod().ReflectedType.FullName;
System.Console.WriteLine("Class Name is {0}", strClassName);
}
}
class Program
{
// エントリーポイント(テスト用)
static void Main(string[] args)
{
// テストメソッドを呼び出す
Sample.Function();
}
}
実行した結果はこんなん。
んまま、メモって事で。
