目录:

  • 什么是委托
  • 委托的作用
  • 委托的本质
  • 委托链
  • 委托链返回值

一、什么是委托?

委托:将符合规则的方法进行包装。装载方法引用的盒子。将方法作为参数传递。

 class Program
    {
        static void Main(string[] args)
        {
            StaticDelegateDome();
        }
        //定义没有返回值委托Feedback,需要一个数值类型参数
        internal delegate void Feedback(Int32 value);
        //方法群:静态、静态、实例
        private static void FeedbackToConsole(Int32 value)
        {
            Console.WriteLine("这是【静态方法】文本显示=" + value);
        }
        private static void FeedbackToMsgBox(Int32 value)
        {
            Console.WriteLine("这是【这是静态方法】消息框显示=" + value);
        }
        private void FeedbackToFile(Int32 value)
        {
            Console.WriteLine("这是【实例方法】文件显示=" + value);
        }
        //委托回掉方法
        private static void Counter(Int32 from, Int32 to, Feedback fb)
        {
            for (Int32 val = from; val <= to; val++)
            {
                if (fb != null)
                    fb(val);
            }
        }
        //单个静态方法注册
        private static void StaticDelegateDome()
        {
            Console.WriteLine("---------------静态方法注册委托例子------------------");
            Counter(1, 3, null);//没有注册回调方法
            Counter(1, 3, new Feedback(Program.FeedbackToConsole));//注册了一个静态的文本显示回调方法
            Counter(1, 3, new Feedback(FeedbackToMsgBox));//如果存在一个类里面可以将前面的类可以省略
            Console.WriteLine();
            Console.ReadKey();
        }
        //单个实例方法注册
        private static void InstanceDelegateDome()
        {
            Console.WriteLine("---------------实例方法注册委托例子------------------");
            Program p = new Program();
            Counter(1, 3, null);//没有注册回调方法
            Counter(1, 3, new Feedback(p.FeedbackToFile));//注册一个实例方法           
            Console.WriteLine();
            Console.ReadKey();
        }
        //方法组注册委托形成委托链1
        private static void ChainDelegateDome1(Program p)
        {
            Console.WriteLine("---------------------委托链例子--------------------");
            Feedback fb1 = new Feedback(FeedbackToConsole);
            Feedback fb2 = new Feedback(FeedbackToMsgBox);
            Feedback fb3 = new Feedback(p.FeedbackToFile);
            Feedback fbChain = null;
            fbChain = (Feedback)Delegate.Combine(fbChain, fb1);
            fbChain = (Feedback)Delegate.Combine(fbChain, fb2);
            fbChain = (Feedback)Delegate.Combine(fbChain, fb3);
            Counter(1, 2, fbChain);
            Console.WriteLine("------------------移除委托链中的方法---------------");
            fbChain = (Feedback)Delegate.Remove(fbChain, new Feedback(FeedbackToMsgBox));
        }
        //方法组注册委托形成委托链2
        private static void ChainDelegateDome2(Program p)
        {
            Console.WriteLine("---------------------委托链例子--------------------");
            Feedback fb1 = new Feedback(FeedbackToConsole);
            Feedback fb2 = new Feedback(FeedbackToMsgBox);
            Feedback fb3 = new Feedback(p.FeedbackToFile);
            Feedback fbChain = null;
            fbChain += fb1;
            fbChain += fb2;
            fbChain += fb3;
            Counter(1, 2, fbChain);
            Console.WriteLine("------------------移除委托链中的方法---------------");
            fbChain -= new Feedback(FeedbackToMsgBox);
        }
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-09-09
  • 2022-02-28
  • 2022-03-08
  • 2021-11-29
  • 2021-11-26
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2021-11-22
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案