轉自:http://www.cnblogs.com/Blackieboy/articles/2203346.htmlhtml
委託是一個類型安全的對象,它指向程序中另外一個之後會被調用的方法(或多個方法)。通俗的說,委託是一個能夠引用方法的對象,當建立一個委託,也就建立一個引用方法的對象,進而就能夠調用那個方法,即委託能夠調用它所指的方法。安全
一、定義委託類型ide
[訪問修飾符]delegate 返回類型 委託名(形參);spa
二、聲明委託對象code
委託名 委託實例名;htm
三、建立委託對象(肯定與哪些方法進行綁定)對象
委託實例名=new 委託名(某個類的方法)blog
四、使用委託調用方法ip
委託實例名(實參)string
一、委託和方法必須具備相同的參數。
二、委託能夠調用多個方法,即一個委託對象能夠維護一個可調用方法的列表而不是單獨的一個方法,稱爲多路廣播(多播)。
三、使用+=和-=運算實現方法的增長和減小
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Delegate;
namespace Delegate
{
public delegate int Call(int num1, int num2);//第一步:定義委託類型
class SimpleMath
{
// 乘法方法
public int Multiply(int num1, int num2)
{
return num1 * num2;
}
// 除法方法
public int Divide(int num1, int num2)
{
return num1 / num2;
}
}
}
class Test
{
static void Main(string[] args)
{
Call objCall;//第二步:聲明委託對象
// Math 類的對象
SimpleMath objMath = new SimpleMath();
// 第三步:建立委託對象,將方法與委託關聯起來
objCall = new Call(objMath.Multiply);
Call objCall1 = new Call(objMath.Divide);
objCall += objCall1;//向委託增長一個方法
//objCall -= objCall1;//向委託減去一個方法
// 調用委託實例,先執行objMath.Multiply,而後執行objMath.Divide
int result = objCall(5, 3);
System.Console.WriteLine("結果爲 {0}", result);
Console.ReadKey();
}
}
寫法:
一、委託 委託名=new 委託(會調用的方法名); 委託名(參數);
二、委託 委託名 =會調用的方法名; 委託名(參數);
三、匿名方法
委託 委託名=delegate(參數){會調用的方法體};委託名(參數);
四、拉姆達表達式
委託 委託名=((參數1,。。參數n)=>{會調用的方法體});委託名(參數);
五、用Action<T>和Func<T>,第一個無返回值
Func<參數1, 參數2, 返回值> 委託名= ((參數1,參數2) => {帶返回值的方法體 });返回值=委託名(參數1,參數2);