c 之委託事件 DelegateEvent

2022-09-16 09:36:09 字數 1701 閱讀 9899

前面一章學習了委託以及多播委託,接下來我們來學習下委託事件。

在學習委託事件的前提下,得知道什麼是觀察者模式。

首先,我們來模擬乙個場景:例如,當乙隻狗汪汪汪叫的時候,baby被嚇哭了,剛好要偷東西的小偷被嚇跑了。

我們一慣的思維是:建立三個類,分別寫乙個方法表示他們的動作,當狗叫的時候,分別呼叫。**如下:

public

class

dog

}public

class

baby

}public

class

thief

}class

program

}

這樣做是可以得到我們想要的結果,但是,dog類與baby、thief之間的耦合就很緊了,不利於後期維護擴充套件。當我們後期需求變動,要再新增乙個動作:貓也被嚇的跑掉了。

怎麼辦,難道我們還要去改動dog類裡wang方法的**嘛?這明顯是乙個糟糕的事情。不過總是有辦法解決的,畢竟辦法都是人想出來的。

上乙個章節我們知道了多播委託,就是把多個方法繫結到同乙個委託,然後依次執行。

接下來我們來看看怎麼實現。

1、首先我們得宣告乙個委託,並且建立這個委託的例項。

2、當狗叫的時候,我們來呼叫這個委託。

3、當我們呼叫狗叫之前,將要觸發的一系列動作(也就是觀察者的動作)繫結到委託就行了。

這3個步驟的**如下:

public

delegate

void

dogwang();

public

class

dog

}class

program

}

貼一下結果吧。

沒毛病。講到這裡,恍然大悟了,這樣的話,我們後需求新增多少個動作都沒關係,我們只需要將方法繫結(+=)給委託就行。當然也是可以取消(-=)某乙個動作的。

接下來我們就要開始講事件了,

那麼什麼是事件呢?什麼是委託呢,它們之前又是什麼關係呢?我想這個問題肯定有很多人想知道,也有很多人搞不清楚。

我們知道委託是一種型別,而事件就是委託乙個例項 。其實就是這麼簡單的。

我們將上面的**用事件來實現,看看是什麼樣的。

public

delegate

void

dogwang();

public

class

dog

}class

program

}

結果如下:

結果和上面一樣,這是就委託事件。那麼委託與事件呼叫有什麼不一樣呢?

1、事件不能像委託一樣 dog.dogwanghandler = new dogwang(baby.cry); 被這樣初始化。因為委託可以 dog.dogwanghandler = null; ,用事件是為了不能在外部隨隨便便地將委託給 null

。2、事件不能像委託一樣在外部呼叫 dog.dogwanghandler(); ,這樣是為了呼叫者不能想呼叫就呼叫。為了防止當觸發乙個件事,執行到一部分的時候就來呼叫。

小結一下:其實它們之前的區別就是乙個許可權問題。

c 委託事件

1,什麼是委託 委託是什麼?從生活理解就像是你是乙個c 程式設計師,你對c 並不了解,當需要進行c 分析的時候你委託給你的一位懂c 的同事幫你來完成 在c 中,委託的作用是這樣描述的 委託就像乙個函式的指標,在程式執行時可以使用它們來呼叫不同的函式。簡單點說,委託能夠引用函式,通過傳遞位址的機制完成...

C 委託事件

一 委託 委託類似於函式指標,但函式指標只能引用靜態方法,而委託既能引用靜態方法,也能引用例項方法。委託使用分三步 1 委託宣告。2 委託例項化。3 委託呼叫。例程一 程式 using system namespace 委託 private int add int num1,int num2 例中,...

C 委託事件

1 namespace222 2324 25 26 建立執行方法 27 28 29 30 31static int stratrun int count,int num count num 3233 34 35 第一步宣告委託 36 37 計算前的總數 38 數字39 計算後的總數 40public...