參考資料
《c#技術揭密》
對學過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(西瓜);
.***中的事件機制就是通過委託來實現的。
下面是c#技術揭密上的一段源**,我加了一些注釋,講解了事件的實現機制
//inventorymanager類用於更新庫存量,它也定義了當更新庫存量時應該觸發的事件,也就是說它發布乙個委託由訂閱者呼叫
//inventorywatcher類定義的是訂閱者,可以選擇是否將自己新增到發布者的列表中,從而在更新庫存時,得到通知
using system;
namespace delegateevents
string sku;
public string sku
}int change;
public int change}}
//發布者
class inventorymanager}}
//訂閱者
class inventorywatcher
//訂閱者的方法,用於在發布者更新庫存量時呼叫
void oninventorychange(object source,inventorychangeeventargs e)
' was by units/n",e.sku,change>0?"increased":"decreased",math.abs(e.change));}}
///
/// 用委託實現事件機制例項
///
class delegateevents}}
天天學Python(一) 鴨子模型
前言 很早之前看過python,鑑於遺忘太快,以此記之 鴨子模型 乙個物件只要 看起來像鴨子,走起路來像鴨子 那它就可以被看做是鴨子 這是動態語言奇妙的地方 看下面的 動物 class animal object def init self,name self.name name 成員變數 defr...
C 委託 委託概述
c 委託概述 委託這個詞在生活中經常用到,委託律師打官司,委託房地產公司購買房子。委託保險 人辦理保險。委託就是把事情交給別人去辦。c 中的委託和生活中的委託很相似,如果將乙個方法委託給乙個物件,那麼這個物件就可以全權 這個方法執行。委託宣告定義乙個類,它是從 system.delegate 類派生...
C 委託 匿名委託
c 委託 匿名委託 委託變數在繫結方法時,是把方法名賦值給了委託變數名,這 樣就需要在類裡面定義方法,而有些方法只用到了 次,這樣的 方法在類裡面過多時,程式的可讀性就不是太好,針對這種情 況,可以使用匿名委託,即不用在類裡面額外定義方法.delegate定義的匿名委託 格式 delegate 引數...