C#之事件初步

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   資料   

    上文簡述了委託,所謂的簡述,只是說了一下如何使用委託,既然有了委託的基礎,便可以稍微一探事件的機制。

    事件,實際上是委託類型,事件處理函數如下:

 public delegate void  MyHander(object sender, MyEventArgs e);//聲明一個委託,其中要與事件的簽名一致

    委託要與將要處理的函數形式一致,所以其有兩個參數,一個是訊息的寄件者sender,即觸發事的對象,一個是包含的要處理的資料e。

    對與上述代碼,其中,MyEventArgs屬於定義的一個類,繼承於EventArgs,這個類基本包含了GUI所需的一切資料,但是額外的需求,就需要另外定義,例如本文後附帶的例子。

事件,

public event MyHander myevent;

定義了一個事件類型的變數,其中MyHander是一個聲明好的委託類型。

首先委託與函數關聯,然後事件與委託關聯,如此,事件便可以調用函數,基本流程如下(實際程式碼群組織時,這幾句不會挨著的):

 public delegate void  MyHander(object sender, MyEventArgs e); MyHander myhander = new MyHander(OutPut);//OutPut是一個執行具體功能的函數,通過此,委託與函數關聯public event MyHander myevent;//定義事件變數myevent += myhander;//事件與委託關聯//下面觸發事件myevent(this,e);

完整的一個代碼如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace EvenTest2{   public class MyEventArgs : EventArgs//1.寫好自己定義的繼承基本的事件參數類  這個要是共有類    {        public string sentence;    }    public delegate void  MyHander(object sender, MyEventArgs e);//2、聲明一個委託,其中要與事件的簽名一致    class A    {        public void OutPut(object sender, MyEventArgs e)//3、設計好實際做事的類        {            Console.WriteLine(e.sentence);        }        public A(B b)//5、(跳一步,這是第五步)根據1步中聲明的委託,定義一個委託變數,然後將這個委託變數與OutPut這個幹活的綁定一起        {            MyHander myhander = new MyHander(OutPut);            b.myevent += myhander;//6、將B中聲明的事件與 上一句中處理好的委託變數綁定,這樣,便可以通過myevent調用OutPut了        }    }    class B//4、設計事件的類,也就是設計用來調用委派物件的事件,通過A類的建構函式與其綁定,方可以調用    {        public event MyHander myevent;        public void callevent(MyEventArgs e)        {            if (myevent != null)            {                myevent(this, e);//7、這一句是調用的開端,從此,如鏈式爆炸一般,一發不可收拾myevent-myhander-OutPut            }        }    }     class Program    {        static void Main(string[] args)        {            MyEventArgs e1 = new MyEventArgs();            e1.sentence = "我也會自訂事件了!!!";            B b = new B();            A a = new A(b);            b.callevent(e1);        }    }}
View Code

 

C#之事件初步

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.