自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#委托和事件學(xué)習(xí)筆記

開發(fā) 后端
這里介紹C#委托和C#事件這兩個(gè)概念是完全配合的。委托僅僅是函數(shù)指針,那就是說,它能夠引用函數(shù),通過傳遞地址的機(jī)制完成。

C#語言還是比較常見的東西,這里我們主要介紹C#委托和C#事件,包括介紹NumberReachedEventHandle 僅是一個(gè)委托等方面。

在學(xué)習(xí)C#委托和C#事件過程中,我讀了許多文章來理解他們二者究竟是怎么一回事,以及如何使用他們,現(xiàn)在我將整個(gè)的理解過程陳述以下,我學(xué)到的每一方面,恐怕也是你們需要掌握的:

什么是C#委托?

C#委托和C#事件這兩個(gè)概念是完全配合的。委托僅僅是函數(shù)指針,那就是說,它能夠引用函數(shù),通過傳遞地址的機(jī)制完成。委托是一個(gè)類,當(dāng)你對(duì)它實(shí)例化時(shí),要提供一個(gè)引用函數(shù),將其作為它構(gòu)造函數(shù)的參數(shù)。

每一個(gè)委托都有自己的簽名,例如:Delegate int SomeDelegate(string s, bool b);是一個(gè)委托申明,在這里,提及的簽名,就是說SomeDelegate 這個(gè)委托 有 string 和 bool 類型的形參,返回一個(gè)int 類型。

上面提及的:當(dāng)你對(duì)委托實(shí)例化時(shí),要提供一個(gè)引用函數(shù),將其作為它構(gòu)造函數(shù)的參數(shù)。這里要注意了:被引用的這個(gè)函數(shù)必須和委托有相同的簽名。

看下面的函數(shù):

  1. private int SomeFunction(string str, bool bln){...} 

C#事件的理解

我們知道,在C#中:
◆按鈕(Button)就是一個(gè)類,當(dāng)我們單擊它時(shí),就觸發(fā)一次click事件。
◆時(shí)鐘(Timer)也是一個(gè)類,每過一毫秒,就觸發(fā)一次tick事件。

現(xiàn)在有一個(gè)Counter的類,它有一個(gè)方法 CountTo(int countTo, int reachableNum),該方法表示:在指定的時(shí)間段內(nèi)(0~~countTo),當(dāng)?shù)竭_(dá)指定的時(shí)間點(diǎn)reachableNum時(shí),就觸發(fā)一次NumberReached事件。

它還有一個(gè)事件:NumberReached,C#事件是委托類型的變量。意思是:如果給事件命名,用event關(guān)鍵字和要使用的委托類型申明它即可,如下所示:

  1. public event NumberReachedEventHandler NumberReached; 

在上面的申明中,NumberReachedEventHandle 僅是一個(gè)委托,更確切的表示應(yīng)該是:NumberReachedDelegate。但是微軟從不這樣認(rèn)為MouseDelegate或者PaintDelegate,而是稱謂:MouseEventHandler 或者 PaintEventHandler。所以

NumberReachedEventHandler 比NumberReachedDelegate聽起來更方便一些,OK?好了,讓我們繼續(xù),現(xiàn)在你知道了,在我們聲明事件之前,需要象下面這樣的形式來定義委托:

  1. public delegate void NumberReachedEventHandler(object sender, NumberReachedEventArgs e); 

現(xiàn)在聲明的C#委托 NumberReachedEventHandle,它有一個(gè)void 返回值,和object,NumberReachedEventArgs兩個(gè)形參。就像我們?cè)?**節(jié)中強(qiáng)調(diào)的那樣,當(dāng)實(shí)例化委托時(shí),作為實(shí)參傳入的函數(shù)也必須擁有和委托同樣的簽名。

在你的代碼中, 你是否用過PaintEventArgs 或者 MouseEventArgs來確定鼠標(biāo)的移動(dòng)位置?是否在觸發(fā)Paint事件的對(duì)象中用過Graphics 屬性?實(shí)際上,為用戶提供數(shù)據(jù)的類都是繼承于System.EventArgs類,就是我們常說的事件參數(shù)類,如果事件不提供參數(shù),就不定義該類。在我們的例子中,我們通過下面的類提供預(yù)期的時(shí)間點(diǎn)。

  1. public class NumberReachedEventArgs : EventArgs  
  2. {  
  3. private int _reached;  
  4. public NumberReachedEventArgs(int num)  
  5. {  
  6. this._reached = num;  
  7. }  
  8. public int ReachedNumber  
  9. {  
  10. get{  
  11. return _reached;  
  12. }  
  13. }  

【編輯推薦】

  1. C#類和結(jié)構(gòu)簡單介紹
  2. C# explicti和implicit詳解
  3. C#編寫ActiveX控件詳細(xì)介紹
  4. C# StringBuilder和String淺析
  5. C#別名指示符學(xué)習(xí)經(jīng)驗(yàn)
責(zé)任編輯:佚名 來源: cnblogs
相關(guān)推薦

2009-08-18 10:54:17

C#事件和委托

2009-08-26 14:27:54

C#委托和事件

2009-10-09 09:07:40

C#委托和事件

2024-05-16 13:36:04

C#委托事件

2024-06-28 10:19:02

委托事件C#

2009-09-08 15:28:24

C#委托

2009-08-18 10:35:26

C#委托

2009-08-03 13:23:04

C#編程組件-事件-委托

2024-05-15 09:11:51

委托事件C#

2009-08-04 13:53:58

C#委托類C#事件

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2011-06-30 10:28:50

C#開發(fā)

2013-03-19 09:48:38

C#

2024-10-05 00:00:35

Action?C#Func?

2024-05-30 12:24:03

C#開發(fā)

2009-08-12 09:28:36

C# WiteOne

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2009-08-12 15:50:40

C# ListBox

2009-08-20 15:02:57

C# If語句

2009-08-26 14:48:05

C#委托與事件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)