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

天天學C#-委托

編輯:.NET實例教程
對學過c/c++的來說,delegate就相當於函數指針,看下面的代碼:

class Person

{

public Person(string name)

{

this.name=name;

}

//一些屬性和方法

string name;

public void Eat(Food food);

}

Person類有一個Eat方法,對它的實例來說,張三,李四,王五都有他們自己的Eat方法

Person zhanSan,liSi,wangWu;

zhanSan=new Person(”張三”);

liSi=new Person(”李四”);

wangWu=new Person(”王五”);

我們可以通過定義一個委托來分別調用Eat方法

public void delegate Eat(Food food);

如果想調用zhanSan.Eat(food)

Eat zhanSanEat=new Eat(zhanSan.Eat);

其他類似:

Eat liSIEat=new Eat(liSi.Eat);

Eat wangWu=new Eat(wangWu.Eat);

這樣調用zhanSanEat(food)就相當於調用zhanSan.Eat(food)

委托最有用的是委托鏈,如果張三,李四,王五共同進餐

則可以定義委托如下

//定義復合委托

Eat togetherEat;

//c#中通過“+“將方法Connect到委托,即將委托加到委托鏈中

//通過“-”將方法從委托鏈中刪除

togetherEat=zhanSanEat+liSIEat+wangwuEat;

//張三,李四,王五一起吃西瓜

togetherEat(西瓜);

//不帶張三,只有李四和王五吃

togetherEat=liSIEat+wangWuEat;

togetherEat(西瓜);

.Net中的事件機制就是通過委托來實現的。

下面是C#技術揭密上的一段源代碼,我加了一些注釋,講解了事件的實現機制


//InventoryManager類用於更新庫存量,它也定義了當更新庫存量時應該觸發的事件,也就是說它發布一個委托由訂閱者調用
//InventoryWatcher類定義的是訂閱者,可以選擇是否將自己添加到發布者的列表中,從而在更新庫存時,得到通知
using System;

namespace DelegateEvents
{
//定義EventArgs的派生類,用來攜帶事件信息
class InventoryChangeEventArgs:System.EventArgs
{
public InventoryChangeEventArgs(string sku,int change)
{
this.sku=sku;
this.change= change;
}
string sku;
public string Sku
{
get{return sku;}
}
int change;
public int Change
{
get{return change;}
}
}
//發布者
class InventoryManager
{
//聲明一個委托,兩個參數必不可少,第一個是發布者對象,第二個一定要是EventArgs類或者其派生類
public delegate void InventoryChangeEventHandler(object source,InventoryChangeEventArgs e);
//定義該委托的事件實例(即委托鏈,用於訂閱者將自己加到委托鏈中
public event InventoryChangeEventHandler OnInventoryChangeHandler;
//InventoryManager的方法
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved