C#委托

委托(delegate)是C#1.0就出现的一个技术,委托就是将方法囊括其中,可以将委托看做一个类的接口,但是在通过Lambda表达式的加入后,委托的实现就像对容易了很多。

委托的构成:4方面

1.声明委托类型:就是定义delegate;

2.必须有需要执行的代码:就是要注册到委托里的方法;

3.创建委托实例:注册到委托;

4.执行invoke委托实例;

lambda表达式的出现就能简略后面2,3,4步,在实现委托的时候可以使用更加方便。

using System;

namespace DelegateAndEvent
{
    //定义一个事件类
    public class MyEvent
    {
        //定义一个委托
        public delegate void MyDelegate();
        //定义一个事件
        public MyDelegate MyDelegateEvent;
        //定义一个触发事件的函数
        public void OnMyDelegateEvent()
        {
            //判断事件是否非空
            if (MyDelegateEvent != null)
            {
                //执行事件
                MyDelegateEvent();
            }
            //MyDelegateEvent?.Invoke(); //简化的判断和执行
        }
    }
    class Program
    {

        //输出一串字符
        public static void putOutChar()
        {
            Console.WriteLine("I was fired");
        }
        //输出第二串字符
        public static void putOutChar2()
        {
            Console.WriteLine("I was fired22222");
        }

        static void Main(string[] args)
        {
            //实例化MyEvent2类
            MyEvent myEvent = new MyEvent();
            //注册一个事件
            myEvent.MyDelegateEvent += new MyEvent.MyDelegate(putOutChar);
            myEvent.MyDelegateEvent += new MyEvent.MyDelegate(putOutChar2);
            //执行触发事件的函数
            Console.WriteLine("执行绑定了两个事件后的函数");
            //调用事件(启动事件)
       myEvent.OnMyDelegateEvent();
//解绑一个事件 myEvent.MyDelegateEvent -= new MyEvent.MyDelegate(putOutChar); //再次执行触发事件的函数 Console.WriteLine("执行解绑了一个事件后的函数"); myEvent.OnMyDelegateEvent(); Console.ReadKey(); } } }
原文地址:https://www.cnblogs.com/liuyang95/p/11660963.html