笑談「委託」與「事件」

2022-03-26 23:11:43 字數 1202 閱讀 2020

這幾天學習委託的時候,突然冒出了乙個很有趣的想法,寫出來與大家分享:

有一天,我餓了,雖然我擁有白菜和豬肉,本來能夠做一道美味的白菜燉豬肉,但我卻沒有把白菜和豬肉做成白菜燉豬肉的方法。這時,我想到了「委託」:

我先宣告了乙個委託,為了讓別人能夠知道,我將其宣告為public:

public

delegate

白菜燉豬肉 cookhandler(白菜 m,豬肉 n);

這樣,不管是誰,只要他有能把白菜和豬肉變成白菜燉豬肉的方法,他的這個方法便可以為我所用。正巧我的乙個哥們frienda就有這個方法,於是,他的這個方法成了我的「委託」的例項:

cookhandler c

=new

cookhandler(frienda.cook);

於是,在輸入白菜和豬肉後,我得到了我想要的白菜燉豬肉:

豬肉燉白菜 tmp;

tmp=

c(白菜,豬肉);

簡直太棒了。

可是後來,我發現每次都需要去委託居然很累,還有沒有更好的辦法呢,比喻說,只要我一餓了,就有某個哥們的某個方法讓我得到白菜燉豬肉。一想到這,別說,還真有--那就是:事件。

public

event

cookhandler  hungryevent;

反正和frienda比較熟,這件事就交給他好了:

this

.hungryevent

+=new

cookhandler(frienda.cook);

豬肉燉白菜 tmp;

tmp=hungryevent

(白菜,豬肉);

原來天底下竟有這麼好的事,只要我喊一聲「我餓了」,總能得到美味可口的白菜燉豬肉。(現實中要是這樣多好啊)

然而好景不久,突然有一天,或許是朋友不再樂意這樣無條件為我服務,或許是什麼原因,總之,竟然出現了:

this

.hungryevent

-=new

cookhandler(frienda.cook);

結果,當我如往常一樣喊了一聲「我餓了」的時候,不但沒得到白菜燉豬肉,還白餓了一頓,差點使得系統崩潰。

從這以後,我變得聰明了:

if(hungryevent

!=null

)每次在喊「我餓了」以前,我總是先看一下有沒有人已經願意用他的方法做我的委託的例項。怎麼樣,這下安全了吧?

本文純屬笑談,如有不當之處,敬請諒解。

委託與事件

1.建立乙個類,分別建立加 減 乘 除四個方法,通過委託和事件,實現 輸入兩個計算數,完成所有的四個方法的呼叫,計算出結果顯示。建立乙個警察 policeman 類,乙個小偷 thief 類,例項化兩個類的物件,當policeman類中警笛鳴響 alarm 方法執行時,觸發小偷逃跑 runaway ...

委託與事件

委託就是以方法做引數進行傳遞,它定義的是方法的框架,如果用這個委託,所宣告的方法就必須按照給定的引數及返滬型別進行處理。宣告委託的方式 delegate 返回值型別 委託型別名 引數 比如delegate void stringprocess string s 注意這裡的除了前面的delegate,...

委託與事件

委託與事件 一 委託 delegate 1 委託是一種可以把引用儲存為函式的型別。2 在定義了委託後,就可以宣告該委託型別的變數,接著把這個變數初始化為與委託有相同返回型別和引數類別的函式引用,之後,就可以使用委託變數呼叫這個函式,就像該變數是乙個函式一樣。如 double multiply dou...