首页 > 学院 > 开发设计 > 正文

委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

2019-11-17 02:51:13
字体:
来源:转载
供稿:网友

委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

委托是一个类。

namespace Consoleapplication1
{
    internal delegate void MyDelegate(int val);
    class PRogram
    {
        static void Main(string[] args)
        {
        }
    }
}

使用Reflector查看委托的IL代码:1○ 委托的确是一个类○ 委托的构造函数接收方法和类实例○ 而且是多播委托,可以用+=为委托变量赋值○ 委托内部使用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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表