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の情報はコンパイル時にバイナリに埋め込まれます。ですのでプログラム実行時にオーバーヘッドは発生しません。
関連記事
コメントを残す