相似於int,string,char等數據類型,委託其實也能夠看作一種數據類型。好比,string聲明的變量strName能夠用來接受字符串,同理,委託聲明的變量就能夠接受一個方法,以後委託聲明的那個變量就能夠像方法同樣使用,能夠看成方法的別名。接下來咱們用實例來解釋。編程
先看下面的一段代碼:spa
static void Main(string[] args) { int i; //能夠接受一個整數的變量 string str; //能夠接受一個字符串的變量 }
在Main方法內聲明瞭2個變量:i和str。你們都很熟悉的代碼,變量i代表它能夠接受一個整數,變量str代表它能夠接受一個字符串。code
那麼若是我想聲明一個變量既能夠接受整數又能夠接受字符串,那該用什麼數據類型來聲明這樣的變量呢?blog
答案很簡單:用class。字符串
public class MyClass { public int i { get; set; } //接受整數 public string str { get; set; } //接受字符串 }
那麼咱們就建立了一種數據類型:MyClass,下面用它聲明的變量能夠同時接受一個整數和一個字符串。get
static void Main(string[] args) { MyClass obj = new MyClass(); obj.i =1; obj.str ="我是字符串"; }
如今問題來了:我想要一種數據類型能夠聲明一個變量用於接受一個方法。string
既然這種數據類型要接受一個方法,那咱們先看看方法長什麼樣:class
public string Method(int m,int n) { return ""; }
一般咱們會調用各類方法,調用方法前咱們會肯定方法的輸入參數的數據類型和方法輸出的數據類型,至於方法的主體咱們一般不關心,方法的主體由方法編程人員去完成便可。變量
對於上面Method方法的輸入數據類型爲2個整數,輸出的是一個字符串。數據類型
如今咱們要聲明一個變量來接受這個方法,那麼這個變量的數據類型也應該要明確輸入,輸出的數據類型。那麼咱們應該定義符合那個方法輸入與輸出一致的數據類型。
public class Test { //這種數據類型能夠接受一個方法 public delegate string MethodDelegate(int i1,int i2); }
好了,我已經聲明瞭和上面Method方法同樣的輸入與輸出類型的一個數據類型了:MethodDelegate。
那麼咱們就能夠用這個數據類型來接受Mehtod方法了,完整代碼以下:
class Program { //這種數據類型能夠接受一個方法 public delegate string MethodDelegate(int i1, int i2); /// <summary> /// 咱們能夠用MethodDelegate聲明一個變量來接受方法了 /// </summary> public void Test() { MethodDelegate IamMethod = Method; //把下面那個Method方法賦值給變量了。 var result=IamMethod(1, 2); //而後把這個變量看成方法同樣執行便可。 } public string Method(int m, int n) { return ""; } }
在上面第4行:咱們用delegate關鍵字聲明瞭一種數據類型:這種數據類型和咱們想要接受什麼樣方法的輸入輸出類型保持一致就能夠了。
那麼上面的MethodDelegate就能夠接受帶2個int類型的輸入參數而且返回類型是string的任何方法了。
如今咱們發現委託和int,string是同樣的概念,只不過,int用來接受整數,string用來接受字符串,delegate用來聲明一種數據類型接受方法。
接下來咱們繼續解釋委託。。。。