委托是一個類。
namespace Consoleapplication1{internal delegate void MyDelegate(int val);class PRogram{static void Main(string[] args){}}}
使用Reflector查看委托的IL代碼:
○ 委托的確是一個類○ 委托的構(gòu)造函數(shù)接收方法和類實例○ 而且是多播委托,可以用+=為委托變量賦值○ 委托內(nèi)部使用Invoke方法觸發(fā)方法○ BeginInvoke和EndInvoke方法用于多線程場景
接下來體驗委托如何使用,以及委托的Method和Target屬性分別代表什么。
namespace ConsoleApplication1{internal delegate void MyDelegate(int val);class Program{static void Main(string[] args){//委托與靜態(tài)方法MyDelegate d = new MyDelegate(M1);d(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("當前委托調(diào)用的是靜態(tài)方法,沒有類實例");}else{Console.WriteLine("當前委托調(diào)用的是實例方法,類實例為:" + d.Target);}Console.WriteLine("-------------------");//委托與實例方法Program p = new Program();d = p.M2;d.Invoke(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("當前委托調(diào)用的是靜態(tài)方法,沒有類實例");}else
新聞熱點
疑難解答