早些学C#时对委托和事件的理解笔记

1、C#中的委托相似于C的函数指针,更如同C++中的引用,可以看成对函数的引用,对应C++中对变量的引用。但在C#中的实际使用方式却更像一个类。
2、可以生成一个指向具有相同函数签名的委托实例,此时调用此委托实例的效果与调用所指向的函数的效果相同。
3、可能对一个委托引用变量使用“=”赋值使其只指向一个委托实例,也可以用“+=”与“-=”接受、去除委托实例。
4、若定义委托变量的时候再加event关键字,就可定义一个特殊的委托变量,即事件。此时此委托变量只能以+=方式接受委托实例(每个委托实例指向一个函数),也只能以-=方式去掉所拥有的委托实例。
5、当某一个事件被触发时,只要程序员通过+=方式给它处理函数,则这些处理函数在此事件触发时会自动调用。
6、C#是通过+=方式给事件增加处理函数的办法来达到处理事件的目的。而在JAVA里,当事件被触发时,此事件会自动传递给对应的监听器接口,所以只要实现此监听器接口的类,就能达到处理此事件的目的。
7、如果要手动实现执行处理函数(C#中)或监听器(JAVA中),C#中只要以调用函数的方式调用此事件就行,而JAVA中得把一个事件传递给一个监听器接口(然后系统才会自动执行此监听器接口中的所有方法)才行。
8、MSDN中阐述了C#与JAVA对事件的不同:“与 Java 中的事件处理(通过实现自定义侦听器类执行)不同,C# 开发人员可以使用委托进行事件处理。”
9、一般定义一个事件处理函数时无返回值,因为即使有返回值,通过调用事件来达到执行相应的所有事件处理函数后,此事件所返回的只有最后被执行的事件处理函数的返回值。
10、可以定义一个委托类型的临时变量(在函数中),但不能定义一个事件类型的临时变量。可以定义一个事件类型的类成员变量。

例:
public delegate void EventHandler(object sender, Event e);
public class Button
{
    public event EventHandler Click;
    public void Reset()
    {
        Click = null;
    }
}

public class Form1
{
    public Form1()
    { // Add Button1_Click as an event handler for Button1’s Click event
        Button1.Click += new EventHandler(Button1_Click);
    }
    Button Button1 = new Button();
    void Button1_Click(object sender, Event e)
    {
        Console.WriteLine("Button1 was clicked!");
    }
    public void Disconnect()
    {
        Button1.Click -= new EventHandler(Button1_Click);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值