2021-06-20-刘铁猛C#语言入门详解-学习笔记P20、21、22事件详解

P20、21、22事件详解

一、P20、21、22内容总结

  1. 事件的概念P20
  2. 事件的应用P21:四个实例
  3. 事件的声明P22
  4. 问题辨析P22:事件与委托的关系

二、事件的概念P20

  1. 事件的角色:使对象或者类具备通知能力的成员
    对象O拥有一个事件E:“当事件E发生的时候,O有能力通知别的对象”
  2. 事件的功能:通知+可选的事件参数(详细信息)
  3. 事件中的一些术语
    ”事件的订阅者“=事件消息的接收者=事件的响应者=事件的处理者=被事件所通知的对象
    ”事件参数“=事件信息=事件数据=事件消息
  4. 提示
    事件多用于桌面、手机等开发的客户端编程
    Java中没有事件,也无委托。C#中事件由接口实现

三、事件的应用P21

  1. 事件模型五个组成部分
    1)事件拥有者(事件的source):对象或者类
    2)事件成员(事件)
    3)事件响应者:对象或类
    4)事件处理器EventHandle:事件响应者的方法成员
    5)事件订阅
    –将事件处理器与事件关联在一起
    –事件处理器与事件需要遵循同一种“约定”才可以进行匹配,这种“约定”是以委托类型为基础的
  2. 使用C#事件实例
    实例一: “一个事件可以同时挂接多个事件处理器”在这里插入图片描述
	//每1秒屏幕上打印jump和sing
    class Program
    {
   
        static void Main(string[] args)
        {
   
            //timer 事件的拥有者
            Timer timer = new Timer();
            timer.Interval = 1000;
            //boy&girl 事件响应者
            Boy boy = new Boy();
            Girl girl = new Girl();
            //Elapsed 事件
            //Action 事件处理器
            //事件订阅
            timer.Elapsed += boy.Action;
            timer.Elapsed += girl.Action;

            timer.Start();
            Console.ReadLine();
        }
    }

    class Boy
    {
   
	//Action 事件处理器
        internal void Action(object sender, ElapsedEventArgs e)
        {
   
            Console.WriteLine("Jump");
        }
    }

    class Girl
    {
   
	//Action 事件处理器
        internal void Action(object sender, ElapsedEventArgs e)
        {
   
            Console.WriteLine("Sing");
        }
    }

实例二
事件拥有者与事件响应者是完全不同的两个对象;
事件响应者用自己的方法(事件处理器)订阅事件,当事件发生时事件处理器就执行了。

		//当鼠标点击窗口时,窗口名称显示当前时间
		static void Main(string[] args)
        {
   
            //form 事件的拥有者
            Form form = new Form();
            //事件的响应者
            Controller controller = new Controller(form);
            form.ShowDialog();
        }

        class Controller
        {
   
            private Form form1;
            public Controller(Form form)
            {
   
                if(form!=null)
                {
   
                    this.form1 = form;
                    //Click 事件
                    //FormClicked 事件处理器
                    //事件订阅
                    this.form1.Click += this.FormClicked;
                }
            }
 			//FormClicked 事件处理器
            private void FormClicked(object sender, EventArgs e)
            {
   
                this.form1.Text = DateTime.Now.ToString();
            }
        }

实例三
事件拥有者与事件响应者是同一个对象;
一个对象拿着自己的方法订阅和处理自己的事件
注意:派生==继承,即在原有的某个类的基础上扩展功能在这里插入图片描述

		static void Main(string[] args)
        {
   
            //form 事件的拥有者&事件的响应者
            MyForm form = new MyForm();
            //Click 事件
            //FormClicked 事件处理器
            //事件订阅
            form.Click += form.FormClicked;
            form.ShowDialog();
        }

        class MyForm : Form
        {
   
            //FormClicked 事件处理器
            internal void FormClicked(object sender, EventArgs e)
            {
   
                this.Text = DateTime.Now<
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值