程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 關於Event與delegate的一些對比

關於Event與delegate的一些對比

編輯:.NET實例教程

using System;

namespace ConsoleApplication3
{
 public delegate void MyDelegate(string str);

 class Class1
 {
  private static void Hello(string str){
   Console.WriteLine("Hello "+str);
  }

  private static void GoodBye(string str){
   Console.WriteLine("GoodBye "+str);
  }

  static void Main(string[] args)
 {
   MyDelegate a,b,c,d;
   a = new MyDelegate(Hello);
   b = new MyDelegate(GoodBye);
   c = a + b;
   d = c - a;
   a("A");
   b("B");
   c("C");
   d("D");

   Console.ReadLine();
  }
 }
}
我的理解就是,delegate就是一個函數的指針,用他聲明的變量實質上就是一個函數,這就要求綁定的時候函數的返回值和參數列表必須符合delegate聲明時候的要求。

這時候,我來比較一下event



this.Load += new System.EventHandler(this.Page_Load);
很顯然,這裡的this.Load是一個事件,也是一個delegate,而這裡的System.EventHandler()也是一個delegate,而且,他的返回值與參數列表和this.Load是相同的。這時候綁定的Page_Load,是System.EventHandler綁定的一個具體的函數,跟前兩者的返回值和參數列表都相同。當this.Load事件發生的時候,觸發了新new的System.EventHandler,從而運行了Page_Load.


找到了一個例子,事件處理的



using System;

public class EventTest
{
public delegate void MyEventHandler(object sender,System.EventArgs e);

public static void MyEventFunc(object sender,System.EventArgs e)
{
Console.WriteLine("My Event is done!");
}

private event MyEventHandler myevent;


public EventTest()
{

this.myevent+=new MyEventHandler(MyEventFunc);
}


public void RaiseEvent()
{
EventArgs e=new EventArgs();
if(myevent!=null)
myevent(this,e);
}


public static void Main()
{
EventTest et=new EventTest();
Console.WriteLine("Please input a");
if(Console.ReadLine()=="a")
et.RaiseEvent();
else
Console.WriteLine("Error");
}
}

在這裡myEvent是一個事件,也是一個delegate,給他加了一個處理的的delegate,也就是一個eventHandler,就是給這個事件添加的處理函數。在構造函數裡面,把MyEventFunc和handler進行綁定。那麼,如果觸發了事件,就執行綁定的函數MyEventFunc.



Ivony 發表於 2005-03-03 10:47 AM    
event就是delegate,只不過是delegate的縮減功能版,或者說受限版。。。。event去掉了delegate的直接賦值功能,其他與delegate一樣。 

也就是說event就是一個不能使用=運算符的delegate。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved