2013-11-01 13 views
16

状況によっては、CallerMemberNameでマークアップされたパラメータと、自動的に取得する他のコンテキストから明示的な値を自分のメソッドに渡したいという状況があります。 これが可能かどうか、属性が常に優先されるかどうかを知りたいですか?明示的に値を渡すことで、CallerMemberNameに帰属するパラメータの自動的に取得された値を上書きできますか?

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

+0

なぜあなたは質問をしてすぐに答えますか? – TyCobb

+1

@TyCobb何も間違っていて、それはさらに奨励されています。しかし、それが大きな疑問であるかどうかは分かりません。 – nawfal

+2

@TyCobb、[meta](http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-if-i-knew-the-answer-before-asking ) –

答えて

23

はい、可能です。したがって、暗黙的にも明示的にも使用できます。

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"); 
+1

これでコードソリューションを投稿して、将来これを見てくれる人に役立つでしょうか? –

+3

@SergueiFedorovには、たくさんのコードが含まれているわけではありません。問題は、 '[CallerMemberName]'でマークされたメソッドの引数に明示的に渡された引数が引き続きその値を尊重するかどうか、あるいは常にメソッドの呼び出し側が示す暗黙の値を使用するかどうかです。 –

+1

@KirkWollと合意しましたが、少し明確にするためのコードを追加しました。 :) –

関連する問題