C# 篇之---委托

delegate 和 event有少许区别,下面来讲述。

delegate 的例子:

delegate void MyDelegate();
    class Observer
    {
        public MyDelegate myDelegate;
    }
    class Receiver1
    {
        public void Run()
        {
            Console.Out.WriteLine("receiver 1 run");
        }
    }
    class Receiver2
    {
        public static void Run()
        {
            Console.Out.WriteLine("receiver 2 run");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Observer observer = new Observer();
            observer.myDelegate += new MyDelegate(new Receiver1().Run);
            observer.myDelegate += new MyDelegate(Receiver2.Run);
            observer.myDelegate();
           }
    }

主要步骤如上述绿色部分,红色+=是为了实现委托的组合,如果此委托对应一个方法,可以直接用=

 

event是通过delegate实现的,event 只是在delegate基础上作了两点限制:
1:客户只能使用委托所提供的+=和-=行为,不能直接用=,即不影响委托对其他observer的notify.
2:只有声明类可以调用(或激发)一个事件,外部类不可以直接调用其事件。

代码如下,红色为和delegate的区别:

delegate void MyDelegate();
    class Observer
    {
        public event MyDelegate myDelegate;
        public void Notify()
        {
            myDelegate();
        }
    }
    class Receiver1
    {
        public void Run()
        {
            Console.Out.WriteLine("receiver 1 run");
        }
    }
    class Receiver2
    {
        public static void Run()
        {
            Console.Out.WriteLine("receiver 2 run");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Observer observer = new Observer();
            observer.myDelegate += new MyDelegate(new Receiver1().Run);
            observer.myDelegate += new MyDelegate(Receiver2.Run);
            //observer.myDelegate();
            observer.Notify();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值