C# - 文法など - クラス名・メソッド名

 クラウディア
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 = "")
{
	・・・	処理	・・・
}
 と省略可能な引数にしておけば、呼び出し側で書かなくても、使えます。