• c#中的委托和事件


         最近又看了下.NEt之美,本人从事.Net开发,平时空闲都是去琢磨前端的。后端的基础就不扎实了。

         什么是委托?

      我的最新理解。A叫B去办理一件事A1,那么A说:我委托A去B办理A1这个事了,后面B具体怎么办理我不管了,总归你要给我办理这事的回复给我就行了。这时候有C也要叫B去办理一件事C1,C的要求也一样也是委托B了。

      那么问题来了:

      为什么A和C都委托B去办理?

      这时候B说:我在专门处理某一方面事情的。而A和C给我的事情都是这方面的,就可以委托给我了。

        中文对于委托:把事情托付给别人或别的机构。

      那么委托在.net里面是怎么处理的。书中给出了很好的例子大家可以看看。书中以打招呼的形式,委托B,取名:GreetingDelegate,定义:public delegate void GreetingDelegate(string name);我们可以理解这个GreetingDelegate相当于string了,当然委托没有那么简单,那么你要委托我的事情必须是同一件,这件事情就是是属于这件事的相当于委托的定义了:GreetingDelegate(string name),不属于我的事的事情我是不会干的。具体代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Delegate {
    // 定义委托,它定义了可以代表的方法的类型
    public delegate void GreetingDelegate(string name);
    class Program {
    private static void EnglishGreeting(string name) {
    第3章 C#中的委托和事件  ◆ 39
    Console.WriteLine("Morning, " + name);
    }
    private static void ChineseGreeting(string name) {
    Console.WriteLine(" 早上好 , " + name);
    }
    // 注意此方法,它接受一个 GreetingDelegate 类型的方法作为参数
    private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
    MakeGreeting(name);
    }
    static void Main(string[] args) {
    GreetPeople("Jimmy Zhang", EnglishGreeting);
    GreetPeople(" 张子阳 ", ChineseGreeting);
    Console.ReadKey();
    }
    }
    }
    输出如下:
    Morning, Jimmy Zhang
    早上好 , 张子阳

    public delegate void GreetingDelegate(string name);
    class Program
    {
    private static void EnglishGreeting(string name) {
    Console.WriteLine("Good Morning,"+name);
    }
    private static void ChineseGreeting(string name)
    {
    Console.WriteLine("早上好,"+name);
    }
    private static void GreetPeople(string name, GreetingDelegate MakeGreeting){
    MakeGreeting(name);
    }
    }

    这个是简单的例子,具体看书吧。

    总结下吧,委托就是一个事,这个事是我们自己定义的一些规则,定义好了之后,相当于函数当中参数来传,当然是有规则的。那么如果我们要用这个委托,那么就按照他的规则去写一些函数,按照他的规则来传,就是事情,就是这么简单。

    现在来看看所谓的事件吧。

    为什么会有事件?说白了就是为了安全起见。A委托B去办事,C委托B去办事,那么如果B有个老大Boss说如果有D来委托你办事,就不要给D办事,不管什么事情。为什么Boss这样说,因为怕D委托的事尽管B可以办但是为违反条例的,B不知道就去把了,那么为了知道这个事情,那么BOOS就要制定一个规则,这样子B去办事才会安全,那么这个就是事件了。而这个事件,最终是给B要求的。那么对于B来说就是:public event GreetingDelegate  delegateEvent;而这个是在Boss下的。这个时候D来找B办事,那么B会对D说,您的事情不能委托我办理,需要你自己去办理或者您去问问Boss吧,他如果说可以就可以。那么D去问Boos了,最终通过了,那么B就可以去办理了。可以这么说了:D委托B去办理,那么D要先经过Boss的同意不能直接办理。那么不是很安全了。

      Boos  boos=new Boos();//Boos说了不能直接对Dosomething调用,这里面delegateEvent就是B了

      boos.delegateEvent+=new GreetingDelegate(D);//D去找Boos

      boos.Dosomething();//boos允许了而不能像boos.delegateEvent(D);直接去调用了。

      看看很好玩的一件事。

      

  • 相关阅读:
    最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
    xcode6+ios8最新真机调试教程
    新手学习ios开发的辅助工具
    IOS事件传递之hitTest:withEvent
    <转>Singletons in Objective-C
    iOS机身振动提醒
    (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
    对数组进行排序
    字符串去掉空格问题
    NSArray排序方法
  • 原文地址:https://www.cnblogs.com/jristy/p/4618731.html
Copyright © 2020-2023  润新知