zoukankan      html  css  js  c++  java
  • 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);直接去调用了。

      看看很好玩的一件事。

      

  • 相关阅读:
    IntelliJ IDEA 创建 hello world Java web Maven项目从头到尾都有图有真相2017版本
    artifact什么意思--刚刚搞web开发的同学可能要问个为什么
    《亲测 已解决》Address localhost:8080 is already in used
    Linux CentOS 服务器搭建与初始化配置图文详解
    CentOS下安装JDK的三种方法
    关于tomcat成功启动但访问不了欢迎界面的问题
    Mac系统安装和配置tomcat步骤详解
    mac jenkins环境安装及jenkins使用(未完待续)
    github初始密码查看
    github公钥私钥
  • 原文地址:https://www.cnblogs.com/jristy/p/4618731.html
Copyright © 2011-2022 走看看