C 委託事件機制 訂閱發布

2022-02-21 03:35:21 字數 2106 閱讀 2994

在看下文的時候,你先要明白乙個問題,什麼是委託,什麼是事件。但其實很讓人頭疼無解的是,即使有的時候你明白了這些原理,但在實際的運用中還是一臉懵逼,無從下手。

其實在很多的時候,你可能在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

public event gradechangeeventhandle gradechange;//它實際上就是gradechangeeventhandle型別的委託

//這裡需要考慮怎麼引發上面事件

protected void ongradechange(gradechangeeventarg arg)

//簡化可以寫成這樣,不懂得自行查閱資料

gradechange?.invoke(this,arg);

}//更新學生名字和引發分數變化事件

public void updategrade(string nm,int grade)

}

.下面可以用action的形式去代替原有的步驟2和事件gradechange的定義,不明白的請自行查閱資料

public action gradechange;
action寫法

.classroom實體,可以看出student_grade為事件的響應函式

public

class

classroom

public

void student_grade(object

sender, gradechangeeventarg arg)

班級:同學收到期末成績通知為");}}

.main函式  

static

void main(string

args)

主體函式main

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 例中,...