天天學C 委託

2021-03-31 08:56:57 字數 1743 閱讀 7266

參考資料

《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 引數...