38

速度と保守性に関して効率的な方法でメソッド名をログに記録する方法を見つけようとしています。.NET 4.5 では、速度の部分を除いて、この目的のためだけにCaller Information 属性が公開されていると思います。System.Reflection.MethodBase.GetCurrentMethod()これらはor stackTrace.GetFrame(1).GetMethod().Name(ここから入手)を使用した単なる構文糖衣だと思います。(または) これらの方法はパフォーマンス上の利点ももたらしますか?

C# では、コンパイル時にメソッド名を取得する方法はありますか ( C++のように)?

4

1 に答える 1

87

呼び出し元情報属性により、C# コンパイラは呼び出しサイトで呼び出し元の名前を提供します。これはコンパイル時に発生し、リフレクションは含まれません。

public void DoProcessing()
{
    LogCall();
}

public void LogCall([CallerMemberName] string memberName = "")
{
     Console.WriteLine(memberName + " was called.");
}

次のようにコンパイルされます。

public void DoProcessing()
{
    LogCall("DoProcessing");
}

public void LogCall(string memberName)
{
     Console.WriteLine(memberName + " was called.");
}
于 2013-04-19T09:28:11.913 に答える