事件:限制类型能力

本文介绍了C#中委托和事件的基本用法,并对比了两者的区别。解释了如何定义委托和事件,以及如何在Publisher和Subscriber类之间建立事件通知机制。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub = new Subscriber();

            pub.NumberChanged += new NumberChangedEventHandler(sub.OnNumberChanged);
            pub.DoSomething();
            pub.NumberChanged(100);

            Console.Read();
        }
    }

    public delegate void NumberChangedEventHandler (int count);

    public class Publisher
    {
        private int count;
        public NumberChangedEventHandler NumberChanged;

        public void DoSomething()
        {
            if (NumberChanged != null)
            {
                count++;
                NumberChanged(count);
            }
        }
    }

    public class Subscriber
    {
        public void OnNumberChanged(int count)
        {
            Console.WriteLine("Subscriber notified: count = {0}", count);
        }
    }
}

当使用委托变量时,客户端可以直接通过委托变量触发事件,也就是直接调用pub.NumberChanged(100),这将会影响所有注册了该委托的订阅者。而事件的本意应该为事件发布者在其本身某个行为中触发,比如在DoSomething()中满足某个条件后触发。通过添加event关键字来发布事件,事件发布者的封装性会更好,事件仅仅供其他类型订阅,而客户端不能直接直接触发事件,事件只能在事件发布者Publisher类的内部触发。

public event NumberChangedEventHandler NumberChanged;

 

转载于:https://www.cnblogs.com/JoeyLieu/p/3684647.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值