多播委托与事件

一个简单的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace text2
{
    //多播委托
    class Program
    {
        static void Function1()
        {
            Console.WriteLine("Funcrion1执行了");
        }
        static void Function2()
        {
            Console.WriteLine("Funcrion2执行了");
        }
        static void Function3()
        {
            Console.WriteLine("Funcrion3执行了");
        }
        static void Main(string[] args)
        {
            Action action = Function1;
            action += Function2;
            action += Function3;
            if (action != null)
            {
                action();
            }
            Console.ReadLine();

        }
    }
}

image.png

注意

多播委托包含一个逐个调用委托的集合,如果通过委托调用其中的一个方法出现异常,整个迭代就会停止。
也可以遍历多播委托中的所有委托,逐一调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace text2
{
    //多播委托
    class Program
    {
        static void Function1()
        {
            Console.WriteLine("Funcrion1执行了");
        }
        static void Function2()
        {
            Console.WriteLine("Funcrion2执行了");
        }
        static void Function3()
        {
            Console.WriteLine("Funcrion3执行了");
        }
        static void Main(string[] args)
        {
            Action action = Function1;
            action += Function2;
            action += Function3;
            //if (action != null)
            //{
            //    action();
            //}
            Delegate[] delegates = action.GetInvocationList();
            foreach (Delegate  d in delegates)
            {
                d.DynamicInvoke();
            }
            Console.ReadLine();

        }
    }
}

事件

事件基于委托,是一种具有特殊签名的委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Text
{
    class Program
    {
        public delegate void Function();
        public event Function function;
        public static void Print()
        {
            Console.WriteLine("Print 执行了");
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.function = Print;
            p.function();
            Console.ReadLine();
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容