2013-11-01 20 views
16

Bazı durumlarda, CallerMemberName ile işaretlenmiş bir parametreyle ve otomatik olarak yakalanmasını istediğim başka bir bağlamda yöntemime açık bir değer vermek istediğim bir durum var. Bunun mümkün olup olmadığını bilmek istiyorum, yoksa özellik her zaman öncelikli mi olacak?Bir değeri açıkça geçirerek CallerMemberName ile atfedilen bir parametrenin otomatik olarak yakalanan değerini geçersiz kılabilir misiniz?

Bunu neden yapmak isterdim, soruyorsunuz. Her yerden çağrılabilen bir denetim bileşeni yazıyorum. Denetim içeriği ve ayrıca CallerMemberName param için gereken bazı parametreleri alır. Ancak süper sınıflarımın bazılarında denetim ile ilgili belirli bilgi parçalarına sahibim. Bu nedenle, yalnızca CallerMemberName paramını alan bir yöntem yazdım. Daha sonra, kendi denetim bileşenine, zaten içerdiği parametreleri ve dolaylı olarak yakalanmış olan arayan üye adını iletir.

+0

Neden sorular soruyorsunuz ve hemen kendiniz cevaplıyorsunuz? – TyCobb

+1

@TyCobb yanlış bir şey değildir ve bu bile teşvik edilir. Ama bu harika bir soru olup olmadığından emin değilim. – nawfal

+2

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

cevap

23

Evet, bu mümkün, hem dolaylı hem de açık bir şekilde kullanılabilir.

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

Kod çözümünü buna gönderebilir misiniz, böylece gelecekte buna rastlayan insanlara yardımcı olur mu? –

+3

@SergueiFedorov, çok fazla kod içermiyor. Soru, parametresi "[CallerMemberName]" ile işaretlenmiş bir yönteme açıkça bağımsız olarak iletilip geçirilmeyeceğidir, bu değere hala uymaya devam eder veya bunun yerine her zaman yöntemin çağıran tarafından belirtilen örtülü değeri kullanır. –

+1

KirkWoll ile katılıyorum, ancak işleri daha net hale getirmek için biraz kod ekledik. :) –

İlgili konular