程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 什麼是委托(delegate)

什麼是委托(delegate)

編輯:關於C#

委托(delegate),剛開始學的時候覺得很難理解,我們可以把它看作是一個修飾符,用來修飾一個類的類型,就像public, static等一樣。定義一個delegate類和我們平時定義類差不多。我們來看一下我們經常用到的EventHandler類的定義,它是.NET中的一個類:

Code
public delegate void EventHandler(object sender, EventArgs e);

上面的代碼可以看成是定義一個delegate的類,類的名字是EventHandler。下面是我定義一個普通的類,看看它們之間有什麼區別:

Code
public class UserInfo{}

可以看到,delegate的類和普通的類的定義還是有比較大的不同的,這只要記住它的格式就行了。我們再看看創建類的實例:

Code
UserInfo userInfo = new UserInfo();
EventHandler handler = new EventHandler(MethodName);

從代碼中可以,它和創建普通的類的實例沒什麼不同,只是它必須要有參數,而且只能有一個。這個參數很特別,它不是什麼類型的參數,而是方法的名字。方法有很多的類型(這裡不是指public,static等等這種類型),就像參數也有很多種類型一樣,它總不能是無論什麼樣的方法都接受吧。那是當然的了,它到底能接受什麼樣的方法呢。這就需要用到修飾了。

上前面,我們看到了定義delegate的類有很大的不同。在它的後面多了一個void,它的前面也多了兩個參數,這些是干什麼用的呢?可能你已經想到了,就是用來修飾方法的類型的。它限定了方法的返回值必須是void,它的參數是(object sender, EventArgs e),只要符合這兩個要求的方法都可以傳給它。

上面的代碼還可以簡單地寫成:EventHandler handler= MethodName;。這樣賦值的話,它的實例像不像是一個方法指針了呢?賦值後我們就能像調用方法一樣調用它了,如:handler(sender, e); ,調用handler,就相當於是調用了方法MethodName。通過handler調用MethodName的過程就叫做代理,也可以叫做委托,也就是MethodName把使用權委托給handler。

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