!關於委託和事件,許多高手都已經對此進行了很詳盡的描述,昨晚突然想到乙個情景,於是今天寫了這個委託和事件的例子出來,純粹是為了練習一下,也希望這篇隨筆對您有幫助!
情景大概是這樣的:有乙個老師,他教好幾個班級,然後每次考試後,他都會小小懲罰成績低於幾個班級成績的平均分的同學,同學們自然會很怕受罰啊,考完試立刻打**問老師。老師剛開始能夠很耐心的回答:張三,你多少分;李四你多少分。。。日子久了,可就折騰人了,剛好這個老師剛學了委託和事件,就寫了個小程式。這個程式的功能是,一旦學生問成績,立刻交給這個程式去處理,然後程式顯示結果,老師當然就可以在旁邊輕鬆地喝茶咯,哈哈,看看**吧!
首先寫個學生實體類,簡單的啦
1class
student213
public
string
name
141617}
18public
void
onaskresult(
object
student, askeventargs resultinformation)
1924}25
public
void
askteacher()
2631
}這樣,傳入乙個學生名字例項化乙個新物件,學生一旦askteacher(問老師咯),就觸發了askresult事件,onaskresult()相對於askresult事件只是觸發前多檢查了該事件是否為空。
接下來要寫事件引數類,也就是上面onaskresult的引數型別-askeventargs類,**如下:
class
askeventargs :eventargs
set}
public
string
name
}public
askeventargs(
bool
unask,
string
name)
}這個引數類儲存了學生的名字和即將告知的結果,(result)結果屬性為可寫的哦;
接下來是老師的部分了,他要訂閱學生問成績這個事件。然後自動給出判斷!
public
teacher()
public
void
recevid(student stu)
public
void
feedback(
object
stu, askeventargs ev)
else
}public
bool
getresult(
string
name)
else}}
這裡簡化了很多,直接用乙個hashtable儲存資料,更多的功能和判斷自己去拓展吧!這裡只是簡單的判斷加列印!包涵包涵!
最後是測試拉(用程式臺)
1static
void
main(
string
args)
2當老師註冊了學生問成績的事件後,學生一問老師,結果就自動出來了,老師呢,一邊喝茶一邊感嘆了解只知識的好處啊,哈哈。。。
原創 委託和事件
委託和事件這兩天重新溫習了一下關於委託和事件方面的知識,總結一下。一.委託 委託就是能夠將方法作為變數來傳遞。c 中使用委託的具體步驟是 1 委託的宣告。其引數形式一定要和想要包含的方法的引數形式一致。委託可以在程式執行時呼叫不同的方法,只要這個方法簽名和委託簽名保持一致。格式 修飾符 delega...
事件和委託示例
1 timer的elapsed事件 using system using system.collections.generic using system.linq using system.text using system.timers namespace timer的elapsed事件 e.si...
委託和事件使用示例
net 的事件模型建立在委託機制之上,透徹的了解了委託才能明白的分析事件。可以說,事件是對委託的封裝,從委託的示例中可知,在客戶端可以隨意對委託進行操作,一定程度上破壞了面向的物件的封裝機制,因此事件實現了對委託的封裝。下面,通過將委託的示例進行改造,來完成乙個事件的定義過程 public clas...