使用反射清除所有掛在事件上的delegate

2021-05-05 07:41:58 字數 1289 閱讀 9303

2007-03-23 13:00 by iceboundrock, 2851 visits, 網摘, 收藏, 編輯

在.net中,event是乙個相當有用的特性,它讓我們可以很輕鬆的實現**。但是它也有著相當的不方便之處:乙個event在宣告它的class之外只能使用+=/-=操作符進行delegate的增減,無法一次刪除所有掛在它上面的delegate。

程式規模小的時候還好辦,一旦程式膨脹,想弄清到底在乙個事件上掛了那些delegate還真是挺麻煩的事情。尤其是很多class都有事件,很多事件在不同的地方被掛鉤。當確定乙個物件不用的時候,你需要及時把它的事件上掛的delegate斷開。

下面這個函式可以起到直接清空乙個物件所有的事件的作用,還是老規矩,**就不多解釋了:

1         

///2          

///清除乙個物件所有事件所掛鉤的delegate

3          

///4          

///有事件的物件

5 public

static

void

clearallevents(

object

objecthasevents)

6          

11 

12              eventinfo events 

=  objecthasevents.gettype().getevents(

13                  bindingflags.public 

| 14                  bindingflags.nonpublic 

| 15                  bindingflags.instance);

16 

17              

if(events 

==null

||events.length 

<

1)18 

21 

22              

for(

inti 

=  

0 ; i 

<

events.length; i

++)23 

44                  }

45                  

catch

46 48              }

49          }

50 

51 

清除所有 svn目錄

一 在linux下 刪除這些目錄是很簡單的,命令如下 find type d name svn xargs rm rf 或者 find type d iname svn exec rm rf 全部搞定。二 在windows下 1 在專案平級的目錄,執行dos命令 xcopy project dir ...

清除所有 svn目錄

這裡 一下網上找到的刪除方法,以備後用,以下內容 iceskysl 1sters 一 在linux下 刪除這些目錄是很簡單的,命令如下 find type d name svn xargs rm rf 或者find type d iname svn exec rm rf 全部搞定。http tech...

清除所有的mobileprovision

首先cd到目錄 library mobiledevice provisioning profiles cd library mobiledevice provisioning profiles 然後刪除裡面所有的mobileprovision檔案 rm mobileprovision 這樣再看xco...