C 中實現事件的學習筆記

2021-04-02 20:14:00 字數 2174 閱讀 8221

c#

中實現事件

事件就是發生的一件事情。把事件資訊通知給其它物件的物件稱為事件發布方(事件源)。物件可以把自己註冊到事件中,該物件稱為事件的訂戶(事件的註冊使用者),事件可以有乙個或多個註冊使用者。事件只把事件資訊通知給所註冊的使用者。

參考:http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/csref/html/vclrfeventpg.asp

c#中的事件需要借助於委託。它們使用委託呼叫預訂了該事件的使用者中的方法。當發布方引發事件時,可能會呼叫許多委託(視預訂該事件的物件數量而定)。

定義事件時,首先由發布方定義委託,然後才能定義事件。事件取決於委託。如:

先定義乙個委託

delegateme:

public delegate void delegateme(object param);

然後根據委託

delegateme

定義事件

eventme:

public event delegateme eventme;

.net

中事件的原形如下:

[attributes] [modifiers]eventtype

declarator;

[attributes] [modifiers]eventtype

member-name ;

其中:

attributes

(可選)

可選的宣告資訊。有關屬性和屬性類的更多資訊,請參見

c# 屬性。

modifiers

(可選)

可選的修飾符,包括:

abstract , new, override, static, virtual, extern ,

四個訪問修飾符之一

type

希望與此事件關聯的

delegate。

declarator

事件名。

member-name

事件名。

accessor-declarations

(可選)

訪問器的宣告,用於新增或移除客戶**中的事件處理程式。訪問器函式為

add和

remove

。只定義乙個而不定義另乙個是錯誤的。

為了建立並使用

c# 事件,必須採取以下步驟: 1.

建立或標識乙個委託。如果正在定義自己的事件,還必須確保有與事件關鍵字一起使用的委託。如果已經預定義了事件(例如在

.net framework

中),則事件的使用者只需要知道委託的名稱。 2.

建立乙個類,包含:

a.從委託建立的事件。 b.

(可選)驗證用

event

關鍵字宣告的委託例項是否存在的方法。否則,該邏輯必須放置在引發此事件的**中。 c.

呼叫此事件的方法。這些方法可以重寫一些基類功能。

此類定義事件。 3.

定義乙個或多個將方法連線到事件的類。所有這些類都包括: ·

使用+=

運算子和

-= 運算子將乙個或多個方法與基類中的事件關聯。 ·

將與事件關聯的方法的定義。 4.

使用此事件: ·

建立包含事件宣告的類物件。 ·

使用定義的建構函式,建立包含事件定義的類物件。

有關事件的更多資訊,請參見

msdn:

·10.7 事件 ·

事件教程 ·

事件和委託

示例:

using

system;

namespace

event_test

}

}

class clsa

}

class clsb

}

class clstest

}

}

這樣,總算完成了

c#.net

中委託與事件的學習,感覺掌握的難度不是很大,比較容易上手,使用起來比較方便。

C 中的事件 C 學習筆記

事件 事件 event 是一種使類或物件能夠提供通知的成員。事件的宣告與字段類似,不同的是事件的宣告包 含 event 關鍵字,並且型別必須是委託型別。在宣告事件成員的類中,事件的行為就像委託型別的字段 前提是該事件不是抽象的並且未宣告訪問器 該欄位儲存對乙個委託的引用,該委託表示已新增到該事件的事...

C 學習筆記 事件

事件 事件基於委託,為委託提供了一種發布 訂閱機制,觸發事件的類叫做發布者,而關心該事件有沒有發生,並等候通知的類叫訂閱者,而在中間又可以定義乙個訂閱系統,用來集中處理訂閱者對事件的訂閱和取消。using system using system.collections.generic using s...

C 中的委託與事件 筆記

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