• 委托


    委托:关键字delegate,委托并不不等同于方法,而是一个引用类型,类似于C++中的指针,委托本质上是一个类

    一:声明一个委托

    namespace Test.Delegate
    {
        public static class JieShouValue
        {
            //声明一个委托
            public delegate void ValDelegate(int day);
            //声明一个委托变量
            public static ValDelegate UserHt;
    
            //创建一个方法
            public static void chafa(int day)
            {
                Console.WriteLine("你好+"+day);
            }
        }
    }
        class Program
        {
            //声明一个委托
            public delegate void MyDelegate(int userId, string userName);
            static void Main(string[] args)
            {
                MyDelegate md=new MyDelegate(GetValue);
                md(2016, "wangds");
                JieShouValue.UserHt=new JieShouValue.ValDelegate(Jian);
                JieShouValue.UserHt(2017);
                JieShouValue.UserHt = new JieShouValue.ValDelegate(JieShouValue.chafa);
                JieShouValue.UserHt(2018);
                Console.ReadKey();
            }
    
            //方法
            public static void GetValue(int id, string name)
            {
                Console.WriteLine("id="+id+"name="+name);
            }
    
            //方法
            public static void Jian(int day)
            {
                Console.WriteLine("day=" + day);
            }
        }
    委托的实现原理:在静态类JieShouValue中声明一个ValDelegate委托类型,里面还有一个和方法,方法参数和委托的参数类型和数量相同,即是委托的关联方法。
    
    实例化委托的时候,将方法JieShouValue.chafa传递给ValDelegate构造器,即将chafa指派给ValDelegate委托,并将该引用赋值给JieShouValue.UserHt变量,也就表示UserHt变量保存了指向chafa方法的引用,以此来实现对chafa的回掉。

    委托链

        class Program
        {
            //声明一个委托
            public delegate void MyDelegate(int userId, string userName);
            static void Main(string[] args)
            {
                MyDelegate md=new MyDelegate(GetValue);
                md(2016, "wangds");
                //进行绑定(+=是进行绑定,-=是解除绑定)
                JieShouValue.UserHt+=new JieShouValue.ValDelegate(Jian);
                JieShouValue.UserHt += new JieShouValue.ValDelegate(JieShouValue.chafa);
                JieShouValue.UserHt(2018);
                Console.ReadKey();
            }
    
            //方法
            public static void GetValue(int id, string name)
            {
                Console.WriteLine("id="+id+"name="+name);
            }
    
            //方法
            public static void Jian(int day)
            {
                Console.WriteLine("day=" + day);
            }
        }
    委托链中,+=操作调用的是Delegate.Combine方法
             -=操作调用的是Delegate.Remove方法
  • 相关阅读:
    广播的最佳实践---实现强制下线功能
    广播的最佳实践---实现强制下线功能
    使用本地广播
    使用本地广播
    关于Win7固态优盘的优化方法
    关于Win7固态优盘的优化方法
    在屏幕中使用评分组件
    在屏幕中使用评分组件
    【NYOJ】[65]另一种阶乘问题
    【NYOJ】[65]另一种阶乘问题
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/5098354.html
Copyright © 2020-2023  润新知