25

コンテキストによっては、CallerMemberName でマークアップされたパラメーターを使用してメソッドに明示的な値を渡したい場合があり、他のコンテキストからは自動的にキャプチャしたい場合があります。これが可能かどうか知りたいですか、それとも属性が常に優先されますか?

なぜ私はそれをしたいのですか、あなたは尋ねます。どこからでも呼び出せる監査コンポーネントを作成しています。監査コンテキストに必要ないくつかのパラメーターと、CallerMemberName パラメーターを取ります。しかし、いくつかのスーパー クラスでは、監査に関連する特定の情報を既に持っているので、CallerMemberName パラメータのみを取るメソッドをそこに書きました。次に、監査コンポーネントを呼び出して、コンテキスト内に既にあるパラメーターと、暗黙的に取得した呼び出し元のメンバー名を渡します。

4

1 に答える 1

36

はい、可能ですので、暗黙的にも明示的にも使用できます。

private void CaptureCaller(
     [CallerMemberName] string callerMemberName = "")
{
    // callerMemberName will contain the name of the method that called CaptureCaller if called with no parameters.
    // callerMemberName will contain the value of the passed in parameter if provided.
}

CaptureCaller();
CaptureCaller("custom value");
于 2013-11-01T05:41:06.830 に答える