委托的作用類似於c++中函數指針的作用。不同的是,委托實例獨立於它所封裝的方法的類,並且方法類型與委托的類型是兼容的。函數指針只能引用靜態函數,而委托可以應用靜態和實例方法。
所有委托都是繼承自System.Delegate類,並且有壹個調用列表。調用委托時所執行的方法都被存放在這樣的壹個連接列表中。
使用delegate關鍵字可以聲明壹個委托。通過將委托與命名方法或匿名方法關聯,可以對委托進行實例化。為了與命名方法壹起使用,委托必須用具有可接受簽名的方法進行實例化。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//聲明壹個委托
delegate int Mydelegate();
class Program
{
static void Main(string[] args)
{
test p = new test();
//將委托指向非靜態方法
Mydelegate m = new Mydelegate(p.InstanceMethod);
//調用非靜態方法
m();
//將委托指向靜態方法
m = new Mydelegate(test.StaticMethod);
//調用靜態方法
m();
Console.Read();
}
}
public class test
{
public int InstanceMethod()
{
Console.WriteLine("正在調用非靜態方法InstanceMethod()....");
return 0;
}
static public int StaticMethod()
{
Console.WriteLine("正在調用靜態方法StaticMethod()。。。。");
return 0;
}
}
}