[C# 5.0]メソッドの呼び元メソッドを調べる方法

C# 5.0では、関数の引数に属性(attribute)を追加する事で、関数の呼び元の情報を取得が可能です。
これはC言語で言う__LINE__,__FILE__マクロ相当のものです。

C#の4.0以前でもリフレクションや、System.Diagnostics.StackTraceを使えば取得は出来たのですが、5.0からは取得が簡単になりました。

※C#4.0でSystem.Diagnostics.StackTraceを使う場合の例はこちら
 → [C#]関数の呼び出し元のメソッド名を知る方法


という訳でサンプルコードです。

class Test
{
    static void Main(string[] args)
    {
        ShowCaller();
    }
 
    static void ShowCaller([CallerLineNumber] int     line = 0,
                            [CallerFilePath]   string path = "",
                            [CallerMemberName] string memberName = "") {
        Console.WriteLine("line:{0}, file:{1}, member:{2}", line, path, memberName );
    }
}



呼び元情報の取得は、メソッドの省略可能引数として実装します。そうすると実行時に.Netのランタイム側が自動でパラメータに値をセットしてくれます。

呼び元情報の取得は、ログの出力や例外ハンドラなどで使用すると調査・デバッグに便利です。

内部的には、CallerLineNumber,CallerFilePath,CallerMemberNameの情報はコンパイル時にバイナリに埋め込まれます。ですのでプログラム実行時にオーバーヘッドは発生しません。

関連記事

コメントを残す

メールアドレスが公開されることはありません。