C 中的委託與事件

2022-04-13 11:58:36 字數 3094 閱讀 9432

寫這篇博文的目的是要記錄一下學習委託與事件的心的與**,方便之後查閱

1、委託,是乙個函式的簽名,規定了函式的返回值與引數列表。類似於這類函式的乙個**,簽名相同但是用途不同的函式s,要執行的時候就通過**來執行,使得函式執行得到諸多的方便。delegate相當於乙個類,具有類的一些特性。

2、事件,事件就是應用程式中各個模組互動的一種訊號。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.timers;

namespace

delegatelearn

static

void writechar(object

source, elapsedeventargs e)

}}

timer物件有乙個elapsed事件,這個事件要求的時間處理程式簽名是system.timers.elapsedeventhandler委託型別,為.net framework定義的標準委託之一,要求的函式簽名為:

void functionname(object source, elapsedeventargs e);

然後將處理程式與事件關聯起來,給事件新增乙個事件處理程式,並啟動計時器,然後會每個100ms產生乙個elapsed事件。

mytimer.elapsed += new elapsedeventhandler(writechar);

時間有幾個重要的組成部分,1、用於事件的委託,規定了事件處理方法的簽名,2、時間的定義,public event [指定的委託型別] [事件名稱],3、事件的產生,在產生事件的類裡面通過一定方法產生該事件,4、在用到該事件的地方,訂閱該事件,將事件處理程式與事件聯絡起來。

乙個自定義事件的例子

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.timers;

namespace

delegatelearn

static random random = new

random();

private

void checkmessage(object

source, elapsedeventargs e)}}

class

display

}class

program

static

void main(string

args)

}}

**中的事件為messagearrived,用於事件的委託為

public

delegate

void messagehandler(string messagetext);

那麼事件處理方法的簽名就被規定為上述的形式,在程式中通過將類的事件處理程式與類的事件聯絡起來就可以處理事件了。

connect.messagearrived += new messagehandler(displaymessage);

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.timers;

namespace

delegatelearn

}public

messagearrivedeventargs()

public messagearrivedeventargs(string

newmessage)

}public

class

connection

set

}timer mytimer = new timer(500

);

public

event

messagehandler messagearrived;

public

connection()

public

void

connect()

public

void

disconnect()

static random random = new

random();

private

void checkmessage(object

source, elapsedeventargs e)}}

class

display

}class

program

}}

這段**,基本上和標準的時間處理程式差不多。

定義事件委託的時候,加入了引發事件物件的引用,和乙個事件引數。

傳送乙個引發事件物件的引用,將其作為事件處理程式的乙個引數,就可以為不同的物件定製處理程式的響應。利用該引用可以訪問源物件,包括他的屬性。通過傳送派生於system.eventargs的事件引數類的引用,就可以將其他必要資訊作為引數,方便處理。

這裡有一點要注意,乙個事件可能會呼叫很多的事件處理函式,這些函式都返回乙個值,那麼會使用哪個返回值呢?系統處理這個問題的方式是,只允許訪問最後乙個呼叫的時間處理方法返回的值。

匿名方法:

delegate

(parameters)

其中parameters是乙個引數列表,這些引數匹配要例項化的委託型別,由匿名方法的**使用。

總結:事件的宣告[訪問修飾符] event [delegate] [事件名]

事件處理程式的訂閱 「+=」

事件委託型別的引數傳遞。

c 中的委託與事件

c 委託與事件 一 委託 關鍵字 delegate 委託是c 中的一種型別,它實際上是乙個對某個方法引用的類 委託是一種引用方法型別 一旦為委託分配了方法 委託將與該方法有相同完全的行為 委託具有引數 和返回值 delegate類能擁有乙個簽名 signature 只能持有與他簽名相匹配的方法的引用...

C 中的事件與委託

delegate委託 delegate是c 中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名 signature 並且它 只能持有與它的簽名相匹配的方法的引用 它所實現的功能與c c 中的函式指標十分相似。它允許你傳遞乙個類a的方法m給另乙...

C 中的委託與事件 筆記

1.委託是型別安全的 函式,是將方法作為方法引數。委託可以註冊多個方法 委託就是乙個 multicastdelegate類,可以通過 賦值,新增方法 物件方法與靜態方法 內部使用delegate.combine方法新增方法。2.事件 事件也是委託,是對委託的封裝,將委託宣告成private成員,不讓...