zoukankan      html  css  js  c++  java
  • 浅谈委托事件


    委托: 具有相同的方法签名和返回值类型的方法列表
    我的理解:委托就是一个可以存放方法(地址)的容器,方法存放在委托中是无序的,当我们在委托中存放多个方法时,
    我们不能确定委托调用方法的顺序。委托是一种类型,与类同级别。
    委托定义:关键字 delegate
    访问修饰符 delegate 返回值类型 委托名(参数......)
    委托赋值:
    public delegate void FistDelegate(int num);
    protected void DelegateMethod(int n){Console.WriteLine("num:"+n)} //与委托有相同签名和返回值类型的方法;
    FistDelegate fd=new FistDelegate(DelegateMethod);

    FistDelegate fd=DelegateMethod;
    添加多个方法用+=, 移除方法用-=;
    调用委托
    在调用委托之前先要判断委托是否为空
    if(fd!=null){fd(12)}

    调用带返回值类型的委托
    注意:如果委托有返回值,且有多个委托,那么就返回最后一个方法返回的值。

    调用引用参数的委托
    delegate void MyDelegate(ref int num);
    值会叠加

    委托就不举例说明了,is easy

    事件:
    1.事件是成员,不是类型 所有事件只能在类中声明,不能在一段可执行的代码中声明事件
    要注意一点事件是成员,可以把它当做变量,不能独立于类
    2.事件中包含一个私有的委托,触发事件时,通过委托调用方法列表中的数据

    3.事件的声明:需要一委托
    访问修饰副 event 返回值类型 委托名 事件名;
    protected event void EventHandler myEvent;

    定义事件时委托可以是自定义委托,也可以是.Net 预定义的委托类型
    最常用的是 EventHandler委托
    EventHandler 委托:
    public delegate void EventHandler(object sender,EventArgs e);
    由上可以看到此委托有两个参数,
    第一个参数:表示调用委托的对象,object类型
    第二个参数:保持状态信息(说白了就是传递参数),但是EventArgs 类没有提供可以传递数据的属性,如果需要
    传递数据,可以继承EventArgs类。见 实例
    public event void EventHandler myEvent;
    实例:
    public delegate void MyEventHandler(object sender,MyEventArgs me);
    public partial class Form1 : Form
    {
    public event MyEventHandler myEvent;
    public Form1()
    {
    InitializeComponent();
    myEvent += new MyEventHandler(Form1_myEvent);
    }

    void Form1_myEvent(object sender, MyEventArgs me)
    {
    MessageBox.Show(me.Message);
    }

    private void btnClick_Click(object sender, EventArgs e)
    {
    MyEventArgs ma = new MyEventArgs();
    ma.Message = "我们都是中国人,";
    if (myEvent != null)
    {
    myEvent(sender,ma);
    }
    }
    }

    public class MyEventArgs : EventArgs
    {
    private String message;

    public String Message
    {
    get { return message; }
    set { message = value; }
    }

    }


    最后注意:只有声明事件的类才能调用事件





  • 相关阅读:
    java8时间处理
    HttpServletRequest
    Elasticsearch简介
    springCloud-Alibaba--Sentinel
    Nacos集群部署:
    nginx安装配置
    hibernate 嵌套事务
    linux下cmake安装mysql 源码
    linux下中文乱码问题解决
    tomcat quartz 被触发两次
  • 原文地址:https://www.cnblogs.com/jaifyhome/p/2689897.html
Copyright © 2011-2022 走看看