zoukankan      html  css  js  c++  java
  • 委托,深入浅出才是王道(三)

    开发基于对象的应用程序,有时候需要使用一种对象通信方式,在一个对象中发生了一些事情时,就需要通知其他对象。这里用到了事件。

    委托就用做应用程序接受到消息时封装事件的方式。

    一、接收器、发送器

    事件接收器是指在发生某些事情时被通知的任何应用程序或对象

    事件发送器可以是是应用程序中的另一个对象或程序集,作用是引发事件,如:点击按钮,发送器就是.NET运行库。需要注意的是,事件发送器并不知道接收器是谁,这就使得事件非常有用。

    现在,在事件接收器的某个地方有一个方法,他负责处理事件。在每次发生已注册的事件时,就执行这个方法。由于发送器不知道接收器是谁,所以无法设置两者之间的引用类型,这时就需要委托作为中介了。

    发送器定义接收器要使用的委托,接收器把事件处理方法注册到事件中。链接事件处理方法的过程称为封装事件。

    下面来看一个例子,创建一个winform程序,从工具箱拖入一个Button并取名为evenTest,定义一个负责处理事件的方法:click_test()

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            eventTest.Click += click_test;
    //this.eventTest.Click += new System.EventHandler(this.click_test); }
    private void click_test(object sender, EventArgs e) { MessageBox.Show(@"我是事件处理程序!"); } }

    在构造函数中的初始化方法后面加上委托相关代码 eventTest.Click += click_test;

    表示把处理程序click_test()赋予Click事件的委托

    这将告诉运行库,在引发evenTest按钮的Click事件时,执行click_test方法,其实这个代码可以自动生产,只需要在设计面板双击按钮,ms会自动生产click方法和委托代码,在Designer.cs文件中的InitializeComponent()方法中可以找到

    this.eventTest.Click += new System.EventHandler(this.eventTest_Click);
    //缩写为:evenTest.Click += eventTest_Click;

    前面的代码中是笔者自己定义的方法名,并不规范,事件方法命名应按照约定遵循“object_event”,object是引发事件的对象,event就是被引发的事件,为了代码的可读性,笔者觉得还是应该遵循这一规则。

    注意:

          1、处理事件的方法必须是void,不能有返回值;

          2、只要是使用EventHandler委托,参数就应该是objec和EventArgs,第一个参数是引发事件的对象,第二个参数EventArgs是包含有关事件的其他有用信息的对象。这个参数可以是任何类型,只要它派生自EventArgs即可。

    后一篇:自己定义EventArgs,还原事件实现真相

  • 相关阅读:
    Java 对象的序列化和反序列化
    Java 数组元素倒序的三种方式
    Java实现字符串倒序输出的几种方法
    sql ,内连接,外连接,自然连接等各种连接
    linux上 安装软件
    打乱数组
    java集合类
    我换了新博客啦
    代理模式
    抽象工厂模式
  • 原文地址:https://www.cnblogs.com/error500/p/2694664.html
Copyright © 2011-2022 走看看