委托是一个类。
namespace Consoleapplication1{internal delegate void MyDelegate(int val);class PRogram{static void Main(string[] args){}}}
使用Reflector查看委托的IL代码:○ 委托的确是一个类○ 委托的构造函数接收方法和类实例○ 而且是多播委托,可以用+=为委托变量赋值○ 委托内部使用Invoke方法触发方法○ BeginInvoke和EndInvoke方法用于多线程场景
接下来体验委托如何使用,以及委托的Method和Target属性分别代表什么。
namespace ConsoleApplication1{internal delegate void MyDelegate(int val);class Program{static void Main(string[] args){//委托与静态方法MyDelegate d = new MyDelegate(M1);d(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("当前委托调用的是静态方法,没有类实例");}else{Console.WriteLine("当前委托调用的是实例方法,类实例为:" + d.Target);}Console.WriteLine("-------------------");//委托与实例方法Program p = new Program();d = p.M2;d.Invoke(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("当前委托调用的是静态方法,没有类实例");}else
新闻热点
疑难解答