在看下文的時候,你先要明白乙個問題,什麼是委託,什麼是事件。但其實很讓人頭疼無解的是,即使有的時候你明白了這些原理,但在實際的運用中還是一臉懵逼,無從下手。
其實在很多的時候,你可能在wpf,winfrom的使用的多,不過這坑爹玩意又不能不去弄明白!
委託和事件
委託:方法作另乙個方法的引數 和類一樣,委託是使用者自定義的型別,但是類是資料和方法的集合,而委託是持有乙個或多個方法。
.netcore的task都離不開它們,但本文還是用原始的delegate,需要了解action,function的可以自尋查閱資料
事件:建立在委託之上,通過機制某個類在發生某些特定的事情之後,通知其他類或物件正在發生的事情。event代表性關鍵字
認識發布者和訂閱者
發布者定義一系列的事件,並提供乙個註冊的方法;訂閱者向發布者註冊,並提供乙個可被**的方法,也就是事件處理的程式。這時候
當事件被觸發,訂閱者接收到通知,訂閱者的提交所有方法被執行
1.發布者擁有某些事件的類和結構
2.訂閱者向發布者註冊類和結構
3.事件處理指訂閱者註冊到事件的方法,在發布者出發被執行
事件註冊 :訂閱者通過**+=**操作符來註冊事件,並提供乙個事件處理程式
以上基本是通用的概念,但還是希望你去看下吧,好了下面開始正文:
例子:比如某個班級,有class1,class2班別等等,向某位同學通知他的期末成績修改變動。這裡我們先考慮一下誰是訂閱者,誰是發布者,事件應該寫在**,觸發事件又是什麼
其實上面也可以看成有個等級的分明,班級為發布者,訂閱者為分數變動,某位同學。 引發函式的事件:分數變動 ,student_grade為事件的響應函式
廢話說了一大堆,好了直接上**
定義分數事件的引數類,繼承eventargs,eventargs是包含事件資料的類的基類,用於傳遞事件的細節。
public class gradechangeeventarg : eventargs.定義分數變化的委託型別}
object sender:表示觸發事件的控制項物件
gradechangeeventargs arg:表示事件資料的類的基類
public delegate void gradechangeeventhandle(object sender, gradechangeeventarg arg);下面寫個student的實體,
updategrade 為乙個觸發事件的函式
public class student.下面可以用action的形式去代替原有的步驟2和事件gradechange的定義,不明白的請自行查閱資料public event gradechangeeventhandle gradechange;//它實際上就是gradechangeeventhandle型別的委託
//這裡需要考慮怎麼引發上面事件
protected void ongradechange(gradechangeeventarg arg)
//簡化可以寫成這樣,不懂得自行查閱資料
gradechange?.invoke(this,arg);
}//更新學生名字和引發分數變化事件
public void updategrade(string nm,int grade)
}
public action gradechange;action寫法
.classroom實體,可以看出student_grade為事件的響應函式
public.main函式class
classroom
public
void student_grade(object
sender, gradechangeeventarg arg)
班級:同學收到期末成績通知為");}}
static主體函式mainvoid main(string
args)
evan
c 委託 事件 機制
c 用委託來實現事件通知機制。委託相當與c 函式指標。整個過程涉及乙個呼叫者,乙個被呼叫者,還有就是這個委託。有以下幾步 1.申明委託,2.定義呼叫者和呼叫的函式,3.定義被呼叫者和具體實現的函式 被呼叫的函式 1.申明委託 在包裡或者類裡,public public delegate void p...
c 委託事件
1,什麼是委託 委託是什麼?從生活理解就像是你是乙個c 程式設計師,你對c 並不了解,當需要進行c 分析的時候你委託給你的一位懂c 的同事幫你來完成 在c 中,委託的作用是這樣描述的 委託就像乙個函式的指標,在程式執行時可以使用它們來呼叫不同的函式。簡單點說,委託能夠引用函式,通過傳遞位址的機制完成...
C 委託事件
一 委託 委託類似於函式指標,但函式指標只能引用靜態方法,而委託既能引用靜態方法,也能引用例項方法。委託使用分三步 1 委託宣告。2 委託例項化。3 委託呼叫。例程一 程式 using system namespace 委託 private int add int num1,int num2 例中,...