程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中委托和方法學習心得

C#中委托和方法學習心得

編輯:C#入門知識

最近一直在回想C#中的委托和事件機制,突然覺得其實C#中的委托和時間機制其實真的和C++中的函數指針就是一樣一樣,可能因為

C#中沒有指針所以就弄出了支持委托和事件的機制。C#中它將方法做為特殊的對象進行封裝起來,從而實現了將方法名做為變量來使用和進行賦值

操作,C#中定義“函數指針”要用delegate關鍵字進行修飾。之後就可以直接可以用“函數指針”定義對象或者對象數組並進行賦值,賦值操作完成後就可以直接做為

相應的函數名使用,例如:


----------------------------YYC


public delegate int Func();

static int fun1()
{
return 1;
}

static int fun2()
{
return 2;
}

Func fc;
fc = fun1;
MessageBox.Show("fun1: "+ fc());//輸出1

fc = fun2;
MessageBox.Show("fun2: "+ fc());//輸出2

其中C#對委托對象估計采用的是一種隊列的儲存結構,所以委托對象是可以進行加減操作的,

例如:

public delegate int Func();

static int fun1()
{
MessageBox.Show("fun1:");

return 1;
}

static int fun2()
{
MessageBox.Show("fun2:");
return 2;
}

Func fc;
fc = (Func )fun1 + (Func)fun2 ;

fc();

當此時再調用fc()函數fun1()和函數fun2()都會被依據加載的順序被執行一遍。

但此時應當注意由於委托對象可以進行加減操作,所以再使用任何一個異常是應當先判斷該委托是否為空.

當然C#中除了委托外其次很重要的另外一個機制就是事件及事件的發布。C#中出現事件類型的主要目的是由於為了

防止程序員的疏忽或惡意使用=直接再給對托類型對象賦值,從而破壞委托的加載,所以就出現了在使用函數指針定

義對象時要用event關鍵字進行修飾。

同時在C#的時間發布和訂閱過程中為了減少做重復性的工作和提高效率,C#已經為我們定義好了EventHandler委托類型

publuc delegate void EventHandler(oblect sender ,EventArgs e);

其中object類是所有類的基類,用來傳遞引發事件的對象即為發布者,如果發布者為靜態類,則直接傳遞null即可。一般在發布者類中直接使用this即可。

要注意此時傳輸時是屬於數據的裝箱操作,接收該對象後還要進行相應的拆箱操作。

EventArgs時間數據類,主要用於傳遞事件數據,只要該數據繼承了EventArgs即可傳輸。

總之說白了C#中的委托機制就是和C++中的函數指針是一樣的,可以類比的這樣去想。而後來的所謂訂閱者和發布者機制

也是基於此原理的。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved