2007年02月21日

自分自身のクラス名とメソッド名

   このエントリーをはてなブックマークに追加 Clip to Evernote
備忘:C#で自分自身のクラス名とメソッド名を取得する方法。ついでに、アセンブリ名も

class MyClass {
public void TestMethod() {

string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
StackTrace st = new StackTrace(false);
StackFrame sf = st.GetFrame(0);

string className = sf.GetMethod().ReflectedType.FullNam
string methodName = sf.GetMethod().Name;

Console.WriteLine(assemblyName);
Console.WriteLine(className);
Console.WriteLine(methodName);
}
}

StackTrace クラスを使うと、こんなことができるんですね。


この記事へのコメント
メソッド名以外は this.GetType()... でも取れますよね。
Posted by 渋木宏明(ひどり) at 2007年02月23日 13:00
渋木宏明(ひどり) さん
コメントありがとうございます。
確かに この場合は、this.GetTypeのほうが簡単ですね。
ただ、これを応用すれば、呼び出し元の、メソッド名とかクラス名を取得できたりしますね。
ケースバイケースですね。

Posted by Gushwell at 2007年02月23日 22:10
あと、StackTrace は pdb に依存している場合があるので、Release/Debug ビルドで取得できる情報(量)が異なります。
確か、.NET 1.x と 2.0 でも差があったはずです。
Posted by 渋木宏明(ひどり) at 2007年02月24日 13:20
はい、ドキュメントにもそのように書いてあるますね。
そういう意味では、使う時には注意しないといけませんね。
Posted by Gushwell at 2007年02月25日 11:12
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50715142