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   

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值