C#事件例子 C#

委托有点像C语言里的函数指针,如果代码想要执行操作,但不知道操作细节,一般可以使用委托。
事件是建立在委托之上的一层封装。
事件和委托的区别就是 访问限制的区别 event就是访问受限的delegate,不能类外去invoke它
Func<1,2,3> 尖括号里的东西最后一个参数3是返回值,Action没有返回值,其实就是系统为了方便用户定义的两个默认委托

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

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub1 = new Subscriber("sub1", pub);
            Subscriber sub2 = new Subscriber("sub2", pub);

            pub.DoSomething();
            Console.ReadLine();
        }
    }

    // 定义一个类来保存自定义事件信息
    public class CustomEventArgs : EventArgs
    {
        public CustomEventArgs(string s)
        {
            message = s;
        }
        private string message;

        public string Message
        {
            get { return message; }
            set { message = value; }
        }
    }

    class Publisher {
        public event EventHandler<CustomEventArgs> RaiseCustomEvent;

        public void DoSomething() {
            // 唤起事件
            OnRaiseCustomEvent(new CustomEventArgs("Did something"));
        }

        protected virtual void OnRaiseCustomEvent(CustomEventArgs e) {
            EventHandler<CustomEventArgs> handler = RaiseCustomEvent;

            if (handler != null) {
                e.Message += String.Format(" at {0}",DateTime.Now.ToString());
                // 使用 () 唤醒事件
                handler(this, e);
            }

        }
    }

    class Subscriber {
        private string id;
        public Subscriber(string ID, Publisher pub) {
            id = ID;
            pub.RaiseCustomEvent += HandleCustomEvent;
        }

        // 定义事件唤醒所触发的动作
        void HandleCustomEvent(Object sender, CustomEventArgs e) {
            Console.WriteLine(id + " received this message: {0}", e.Message);
        }
    }


}

这里事件就用到了委托 EventHandler省去了 delegate

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值