zoukankan      html  css  js  c++  java
  • C#中的方法(函数),委托和事件

    1. 先有方法,然后再有委托,最后再有事件

    2. 思考能不能将 A方法 作为参数,传递给 B方法呢?

        eg: 在传统的编程方式中,A方法 调用 B方法的方式如下:

    //洗菜
    public void Washing(string vegetables){
         Console.WriteLine("清洗"+ vegetables);
    }
    
    //做家务
    public void DoingHousework( ){
        //洗菜..
    Washing("土豆");//直接调用 }

          能不能像vegetables作为Washing()的参数那样,来实现

          DoingHousework()调用Washing()呢,那代码应该怎么写呢,

    //洗菜 
    public void Washing(string vegetables){
    Console.WriteLine("清洗"+ vegetables);
    } /* 能不能将Washing()作为参数, 传递给DoingHousework()呢 */ //做家务 public void DoingHousework( ){//貌似以前没怎么听说过,可以将方法作为另一个方法的参数哦,那这个参数的类型应该是 //洗菜.. }

          貌似以前没怎么听说过,可以将方法作为另一个方法的参数哦,那这个参数的类型应该是 没错就是委托

    3. 委托 delegate(方法的类型):

              类似于C/C++中的函数指针

        委托的声明:

        public delegate void HouseworkDelegate(string str);

        注意:

                delegate:是委托的关键字,由上面委托的声明可以看出,它除了多了delegate关键字,其他部分跟方法的声明完全一样

         那么上面的例子使用委托后,应该改为:

    //声明委托
    public delegate void HouseworkDelegate(string str);
    
    //洗菜
    public void Washing(string vegetables){
         Console.WriteLine("清洗"+ vegetables);
    }
    
    //DoingHousework()拥有一个HouseworkDelegate类型的参数
    public void DoingHousework(HouseworkDelegate houseworkDelegate){
        //洗菜
        houseworkDelegate("西红柿");
    }
    

       更多委托相关的信息,可以查看另一篇博客:C#中的委托 Delegate(委托 也叫代表,代表一类方法)

    4. 事件 event:

            如果说 委托 是对方法的抽象(其实是方法的类型);那么事件 则是在委托的基础上 进行了一些特殊的处理,加工

            所以 事件 本质还是委托。

        4.1. 事件的声明:

              public event HousewordDelegate housewordEvent;

              注意:

                event:是事件的关键字, event后面紧接的是 委托的类型 HousewordDelegate,

                         所以声明事件之前,必须先声明事件所要使用的Delegate,由声明更可以看出,事件就是加工过后的委托!!

             

               借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误:

               public event GreetingDelegate MakeGreet;

             

    5. 总结:

           委托,事件,归根到底其实就是对方法的加工和特殊处理后的产物。

    更多内容,请查看:http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx   

        

  • 相关阅读:
    python实战===用python调用jar包
    Django连接数据库写入数据报错
    Niginx主配置文件参数详解
    uwsgi参数详解
    JSON序列化和反序列化
    ServiceBroker创建流程
    WCF和WebService中获取当前请求报文的方法
    python 关于文件的操作
    关于函数对象的理解
    python,关于用户登录与注册问题
  • 原文地址:https://www.cnblogs.com/tommy-huang/p/4869363.html
Copyright © 2011-2022 走看看