国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#-委托和事件

2019-11-18 17:06:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

要為類構(gòu)造一個(gè)事件,必須用 event 來(lái)聲明一個(gè) delegate 型的字段,如:

puclic calss Test{
         public delegate EventHandler(object sender, EventArgs e); //聲明為delegate 型的事件;
}

然后要指定一個(gè)事件的名稱,并寫出處理語(yǔ)句:
        public event  EventHandler Load

在創(chuàng)建類的實(shí)例后定義這個(gè) “Load”事件:
        Test m=new Test();
        m.load=new EventHandler(m_Load);
        void m_Load(object sender, EventArgs e)
        {
                MessageBox.Show(" this is a class event");
        }      


再看看下面的完整的一段代碼:


 using System;
 
 class TestClass
 {
     static void Main(string[] args)
      {
         EventClass myEventClass = new EventClass();
         myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent1); // 關(guān)聯(lián)事件句柄;
         myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent2);
        myEventClass.InvokeEvent();
        myEventClass.CustomEvent -= new EventClass.CustomEventHandler(CustomEvent2);
        myEventClass.InvokeEvent();
        myEventClass.Load += new EventClass.CustomEventHandler(Load1);
        myEventClass.onLoad();
    }

    PRivate static void CustomEvent1(object sender, EventArgs e)
    {
        Console.WriteLine("Fire Event 1");
    }

    private static void CustomEvent2(object sender, EventArgs e)
    {
        Console.WriteLine("Fire Event 2");
    }
    private static void Load1(object sender, EventArgs e)
    {
        Console.WriteLine("Current background color is {0}. Please input:", System.Console.BackgroundColor.ToString());
    }
}

public class EventClass
{
    public delegate void CustomEventHandler(object sender, EventArgs e);//首先定義一個(gè)委托類型的對(duì)象CustomEventHandler

    //用delegate數(shù)據(jù)類型聲明事件,要用event關(guān)鍵字,這里定義了兩個(gè)字件;
    public event CustomEventHandler CustomEvent;
    public event CustomEventHandler Load;
       
    public void InvokeEvent()
    {
        CustomEvent(this, EventArgs.Empty);
    }
    public void onLoad()
    {
        Console.BackgroundColor = ConsoleColor.Red;
        Load(this, EventArgs.Empty);
        string s = Console.ReadLine();
        if (s != "yuping")
        {
            Console.WriteLine("You must type 'yuping' for change it !");
        }
        else
        {
            Console.BackgroundColor = System.ConsoleColor.Black;
            Console.Clear();
        }

    }
}

        在包含事件聲明的類中,聲明一個(gè)數(shù)據(jù)類型是委托的這么樣的一個(gè)對(duì)象CustomEventHandler, 它有兩個(gè)參數(shù)(sender和e);在這里使用委托的目的就是在運(yùn)行中向參數(shù)傳遞方法,并由委托對(duì)象生成的實(shí)例接收這個(gè)參數(shù)方法的返回值,因此,在聲明委托型的對(duì)象時(shí)應(yīng)根據(jù)類中的方法結(jié)構(gòu)來(lái)定義,或者說(shuō)在引用類中應(yīng)當(dāng)根據(jù)委托型對(duì)象的結(jié)構(gòu)來(lái)生成響應(yīng)事件的方法結(jié)構(gòu),比如兩者都有哪些類型的參數(shù)、返回值的類型,也就是說(shuō)兩者要保持一致。同時(shí),要正確地使用C#中的委托,就必須保持三個(gè)步驟:聲明——實(shí)例化——調(diào)用。
       
        在上面的代碼中,EventClass 類就體現(xiàn)了這個(gè)原則:
        1. 聲明委托類型的對(duì)象: public delegate void CustomEventHandler(object sender, EventArgs e);
        2. 創(chuàng)建CustomEventHandler對(duì)象的實(shí)例CustomEvent:public event CustomEventHandler CustomEvent;
        3. 在InvokeEvent()方法中實(shí)現(xiàn)了對(duì)該事件的調(diào)用,引用事件。


http://skylaugh.VEVb.com/archive/2006/07/11/448098.html


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肥乡县| 东光县| 南昌市| 大兴区| 海淀区| 南木林县| 资阳市| 阿拉善右旗| 鲁山县| 公主岭市| 万载县| 岚皋县| 蒙阴县| 江口县| 昭平县| 封开县| 榆社县| 淮阳县| 和林格尔县| 股票| 伽师县| 常州市| 闽清县| 财经| 渭南市| 哈尔滨市| 楚雄市| 台中县| 泗洪县| 崇州市| 临夏县| 定兴县| 北碚区| 南通市| 嘉定区| 怀来县| 涪陵区| 平乡县| 全椒县| 绥德县| 闻喜县|