淺析C#委托和事件實(shí)例探討
對(duì)于C#委托和事件,大家看的書或者其他文章都很多。本文將從作者的一個(gè)實(shí)際例子出發(fā),讓大家來共同探討C#委托和事件的作用,并更好的理解。
最近在學(xué)習(xí)委托和事件,在書店里面看了好多書,但是都是迷迷的。今天在博客園里面看到了張子陽(yáng)所寫的博客C#中的委托和事件:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 看后對(duì)委托和事件有了一個(gè)新的認(rèn)識(shí),可以是沒有用到實(shí)際項(xiàng)目中去吧,感覺還是有點(diǎn)不知……
下面我起一個(gè)拋磚引玉作用讓這兩天在書中看到的,及看張子陽(yáng)博客和寫的一個(gè)和他類似的程序……
當(dāng)?shù)谝淮温牭轿?、事件時(shí)感覺比較抽象、很好奇,當(dāng)看到老師在課堂上利用委托和事件實(shí)現(xiàn)兩個(gè)窗體調(diào)用時(shí)、感覺委托太神奇了,呵、不廢話了……
C#委托和事件在做程序是很常見到的,對(duì)于像我這樣的接觸C#不是很長(zhǎng)的光會(huì)去用,但不知道他里面的含義及本質(zhì)、想理解他還是有一點(diǎn)困難的,下面有兩個(gè)例子大家可以看一下
- public delegate void Mydelegate(string name); //定義一個(gè)委托
- class Program
- {
- public static void show(string name)
- {
- Console.WriteLine(name);
- }
- static void Main(string[] args)
- {
- Mydelegate My = show; //利用遇他相對(duì)應(yīng)的方法來實(shí)例化委托
- My("呵呵"); //調(diào)用委托
- Console.ReadKey();
- }
- }
這個(gè)小例子是定義一個(gè)委托,通過與他相對(duì)應(yīng)的方法來實(shí)例化委托,然后調(diào)用委托,實(shí)現(xiàn)方法。
下面一個(gè)例子是我看過張子陽(yáng)博客后寫的,本人英語(yǔ)不是太好、可能里面定義會(huì)有些……
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication7
- {
- //我們來模擬一個(gè)打字智能機(jī),他有三部分構(gòu)成:在鍵盤上面輸入文字、輸出在顯示器、語(yǔ)音提示;如果要實(shí)現(xiàn)這三種操作必須需要三種不同的硬件,所以
- //鍵盤只能實(shí)現(xiàn)打字、顯示器實(shí)現(xiàn)輸出,語(yǔ)單提示設(shè)備實(shí)現(xiàn)讀出文字。所以我們應(yīng)該讓他們看成三種不同的對(duì)象,來實(shí)現(xiàn)程序!
- //定義三個(gè)類,Smart(智能機(jī)類),Typing(打字方法),show(顯示方法),MakyVoice(語(yǔ)音提示方法)
- //鍵盤打字
- public class Smart
- {
- public delegate void SmartDelegate(char T);//定義一個(gè)委托
- public event SmartDelegate SmarEvent;//定義實(shí)現(xiàn)這個(gè)委托的事件
- public char T;//相當(dāng)于你每一次打的單個(gè)文字
- //定用一個(gè)字符串相當(dāng)于我們從鍵盤上打出來的文字…… 呵
- public string Text = "解放四大快捷方式打開附件多撒即可了飛灑富商大賈快樂看附件撒瘋狂";
- public void Typing()
- {
- foreach (char t in Text)
- {
- T = t;
- if (SmarEvent != null)
- {
- SmarEvent(T);
- }
- }
- }
- }
- //顯示輸出
- public class Display
- {
- public void show(char T)
- {
- Console.WriteLine(T);
- }
- }
- //語(yǔ)言提示
- public class Voice
- {
- public void MakyVoice(char T)
- {
- Console.WriteLine("您輸出了:" + T);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Smart S = new Smart();
- Display D = new Display();
- Voice V = new Voice();
- S.SmarEvent+=new Smart.SmartDelegate(D.show);
- S.SmarEvent+=new Smart.SmartDelegate(V.MakyVoice);
- S.Typing();
- Console.ReadKey();
- }
- }
- }
感覺自己知道的太少了、對(duì)委托和事件、泛型、接口 這些語(yǔ)法理解太淺了、甚至都不理解!呵,學(xué)起來也比較困難,但又不能不去看、不去學(xué)、那樣都無法往下去學(xué)習(xí)其他的! 希望像我這樣的迷茫者可以多看一下博客園的老人們寫的經(jīng)典博客,多看看一書……。如果大家們有更好學(xué)習(xí)方法,可以寫出來,交流一下,,這樣的文章放到首頁(yè)可能會(huì)不合適……
原文標(biāo)題:C#中的委托和事件-拋磚引玉
鏈接:http://www.cnblogs.com/ipwjh/archive/2009/10/08/1578947.html
【編輯推薦】