c#事件委託

來源:互聯網
上載者:User

標籤:blog   使用   代碼   new   div   .net   

C# 使用委託模型 來實現事件,事件的處理方法不必在將建置事件的類中定義,需要做的事情就是把事件來源和事件處理常式結合起來,使用事件處理委託,簡稱事件委託可以定義為建置事件的類的一個成員,事件委託為多播的。

事件委託的形式

public delegate void MouseHandler(object source , EventArgs e)

object souce 為事件來源(表示發生事件的來源,比如 button)

EventArgs :System.EventArgs類的執行個體或者衍生類別的執行個體,它包含事件的另外資訊。

.NET Framework 定義了大量的事件處理委託

如:public delegate void KeyEventHanlder(boject souce ,KeyEventArgs args)

如:public delegate void MouseEventHanlder(boject souce ,MouseEventArgs args)

..........................................................................................................................................................................................................

使用者自訂事件委託(只為說明下事件委託運行原理)

public delegate void NameEventHandler (object souce,NewEventArgs e)

必須自己定義 NewEventArgs類,NewEventArgs 為System.EventArgs的衍生類別

建立事件委託的執行個體 不用new 關鍵詞,使用 envet關鍵字 pubic event NameEventHandler  namehandler;

觸發事件

1)把事件委託的一個執行個體定義為類的成員

比如button的Click事件 把事件委託的一個執行個體成員定義到button類中

2)確定何時建置事件代碼

3)定義產生提供事件的EventArgs對象代碼

Demo

public class  NameListEventArgs:EventArgs{ public string name; public int count;  public NameListEventArgs(string name,int count) {  this.name=name;  this.count=count; }  public string Name {  get{ return name;}  set{name=value} } public int Cout {  get{return count;}  set{count=value;}    }}

  

public  class Namelist //相當於事件來源類,如發生單擊事件的button類{  ArrayList list;  public event NameListEventhandler nameListEvent;  pubic Namelist()  {  list =new ArrayList();  }    public void Add (string name)  {    list.Add(name);    if(nameListEvent !=null)    {      nameListEvent (this ,new NameListEventArgs(name,listCount) ); //new NameListEventArgs(name,listCount) 為EventArgs的衍生類別的執行個體    }  }}
namespace Demo{  public class TestDemo  {    private void button_Click(object sender ,EventArgs e)    {      NameList name =new NameList();      name.nameListEvent+=new NameListEventHandler(NewName);      name.nameListEvent+=new NameListEventHandler(CurrentCount);      name.Add("Msdn");      name.Add("Webcast");    }        public  static void NewName(object souce,NameListEventArgs e)    {      console.write("sssssss");    }    public  static void CurrentCount(object souce,NameListEventArgs e)    {      console.write("qqqqq");    }  }}

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.