2011-10-08 89 views
0

爲null我有以下問題:設置靜態事件使用反射

我有一類〜100個靜態事件,我想在處置時將所有這些事件爲空(刪除所有代表)。 我可以使用反射嗎?因爲否則就會寫很多東西,很難與變化保持同步。

我想是這樣的:

foreach (EventInfo eventInfo in GetType().GetEvents(BindingFlags.Static | BindingFlags.Public)) 
    { 
     // ? 
    } 

但我不知道如何設置爲null。我想這不是反思,他們可能是另一種簡單的方法嗎?

BR, 大衛

+1

我不明白。爲什麼要處置一個實例null所有靜態事件? – svick

+0

這些事件是否自動實現? –

回答

3

下面應該工作:

foreach (EventInfo eventInfo in GetType().GetEvents(BindingFlags.Static | BindingFlags.Public)) 
    { 
     FieldInfo field = GetType().GetField(eventInfo.Name, BindingFlags.Static | BindingFlags.NonPublic); 
     field.SetValue(null, null);    
    } 

只要有爲當然的事件的確支持領域,否則就沒有辦法「設定」他們。

1

您不能「設置」事件,唯一可用的操作是添加或刪除特定的代理。

但是,您可以設置後臺字段。請注意,事件和字段之間不一定是1:1的對應關係 - WinForms使用代理字典來避免爲沒有處理程序的事件浪費空間。