- 1. 概要
- 2. 自分のクラス名・メソッド名を取得
- 3. 呼び出し元のクラス名・メソッド名を取得
1. 概要
ログ等を出力する際、クラス名やメソッド名をつけたいこと・・・ありますよね。
「C」「C++」であれば、「__FILE__」「__LINE__」というマクロを使えば、ファイル名と行番号をコンパイラの方でつけてくれるので、楽ちんですが。
「C#」の場合、少し、工夫が必要です。
かつ、以下に述べるのは、「.NET Framework 4.8」以降でのメモになります。
「.NET Framework 4.8」以前では、コンパイルエラー等が発生するかもしれません。
本ページは、下記のサイトを参考にさせていただきました。
「C#で自身のクラス名や関数名を取得する #C」
「C# 呼び出し元のメソッド名などの情報を取得する」
ちなみに、今まで、メソッド名で「.ctor」ちゅうのが、ときどき出現して。
なんじゃろかと思っていたら、今回、参考サイトで、「.ctor」ちゅうのは、コンストラクタであると、初めて知りました。
2. 自分のクラス名・メソッド名を取得
自分のクラス名・メソッド名を取得するには、下記のようなメソッドを使用します。
GetType().Namespace; // ネームスペース取得
GetType().Name; // クラス名取得
System.Reflection.MethodBase.GetCurrentMethod().Name; // メソッド名取得
わたしは。
try
{
・・・ 処理 ・・・
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(@"["+ GetType().Name +@"]["+ System.Reflection.MethodBase.GetCurrentMethod().Name +@"] 例外[" + ex.ToString() + @"]");
}
てな、書き方をして、デバッグ時の出力ウィンドウに、例外発生時のメッセージを表示したりします。
3. 呼び出し元のクラス名・メソッド名を取得
実機で使用する場合、コンソールなり、ログファイルなりに、出力を集めるために、専用の共通クラスを作ることになるので、共通クラスの方で、呼び出し元のクラス名・メソッド名を取得することになります。
呼び出し元のクラスは。
var caller = new System.Diagnostics.StackFrame(1, false);
という一文を使っておけば、「caller.GetMethod().DeclaringType.FullName」で取得することができます。
この場合、呼び出し元のクラスの「namespace」も同時に取得することになります。
呼び出し元のメソッドは、引数形式にして・・・。
public void called([CallerMemberName] string callerMethodName = "")
{
・・・ 処理 ・・・
}
と省略可能な引数にしておけば、呼び出し側で書かなくても、使えます。
|
|