2011-06-28 15 views
7

İlk olarak, GetInvocationList() çalışmayacak çünkü onları sınıfın dışından almak istiyorum. Ben bazı yansıma büyüsü ile çalışacağını varsayalım, ve bu anlamaya çalışıyorum.Yansıtmayı kullanan bir olaydaki temel delegelerin listesini nasıl alabilirim?

fooEventDispatcher.GetType().GetField("FooEvent", BindingFlags.Instance | BindingFlags.NonPublic); 
var field = fieldInfo.GetValue(fooEventDispatcher); 

Sadece field ne yapacağımı bilmiyorum:

İşte şu anda da bu. Herhangi bir fikir?

+0

İlan listesine göz atmanın amacı nedir? Amaca bağlı olarak, istediğiniz sonucu elde etmek için yansımadan daha kolay bir yol olabilir. –

+0

@Joel: Bir nesnenin bir etkinliğe kendisini abone olduğunu test etmek istiyorum. Çağrının yan etkisini test etmek temiz bir çözüm değildir. – ryeguy

+0

Neden GetInvocationList() çalışmaz? Bu, herkese açık bir yöntemdir ve sınıfınız meclise dahil değilse, dışarıdan gelen herkes bu yöntemi çağırabilir. – ferosekhanj

cevap

9

Bu çalışması gerekir: türü zaten (ben öyle varsayalım) derleme zamanında biliniyorsa

var fieldInfo = fooEventDispatcher.GetType().GetField(
       "FooEvent", BindingFlags.Instance | BindingFlags.NonPublic); 
var field = fieldInfo.GetValue(fooEventDispatcher); 
MulticastDelegate eventDelegate = (MulticastDelegate)field.GetValue(fooEventDispatcher); 
if (eventDelegate != null) // will be null if no subscribed event consumers 
{ 
    var delegates = eventDelegate.GetInvocationList(); 
} 

Ayrıca typeof(SomeFooClass) yerine fooEventDispatcher.GetType() kullanmalıdır.

+3

Satır 4, 'MulticastDelegate olayıDelegate = (MulticastDelegate) alanı olmalıdır; – wezten

İlgili konular