C#之事件初步

上文简述了委托,所谓的简述,只是说了一下如何使用委托,既然有了委托的基础,便可以稍微一探事件的机制。

事件,实际上是委托类型,事件处理函数如下:

 public delegate void  MyHander(object sender, MyEventArgs e);//声明一个委托,其中要与事件的签名一致

委托要与将要处理的函数形式一致,所以其有两个参数,一个是消息的发送者sender,即触发事的对象,一个是包含的要处理的数据e。

对与上述代码,其中,MyEventArgs属于定义的一个类,继承于EventArgs,这个类基本包含了GUI所需的一切数据,但是额外的需求,就需要另外定义,例如本文后附带的例子。

事件,

public event MyHander myevent;

定义了一个事件类型的变量,其中MyHander是一个声明好的委托类型。

首先委托与函数关联,然后事件与委托关联,如此,事件便可以调用函数,基本流程如下(实际代码组织时,这几句不会挨着的):

 public delegate void  MyHander(object sender, MyEventArgs e);
 MyHander myhander = new MyHander(OutPut);//OutPut是一个执行具体功能的函数,通过此,委托与函数关联
public event MyHander myevent;//定义事件变量
myevent += myhander;//事件与委托关联

//下面触发事件
myevent(this,e);

完整的一个代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EvenTest2
{
   public class MyEventArgs : EventArgs//1.写好自己定义的继承基本的事件参数类  这个要是共有类
    {
        public string sentence;
    }
    public delegate void  MyHander(object sender, MyEventArgs e);//2、声明一个委托,其中要与事件的签名一致
    class A
    {
        public void OutPut(object sender, MyEventArgs e)//3、设计好实际做事的类
        {
            Console.WriteLine(e.sentence);
        }
        public A(B b)//5、(跳一步,这是第五步)根据1步中声明的委托,定义一个委托变量,然后将这个委托变量与OutPut这个干活的绑定一起
        {
            MyHander myhander = new MyHander(OutPut);
            b.myevent += myhander;//6、将B中声明的事件与 上一句中处理好的委托变量绑定,这样,便可以通过myevent调用OutPut了
        }
    }
    class B//4、设计事件的类,也就是设计用来调用委托对象的事件,通过A类的构造函数与其绑定,方可以调用
    {
        public event MyHander myevent;
        public void callevent(MyEventArgs e)
        {
            if (myevent != null)
            {
                myevent(this, e);//7、这一句是调用的开端,从此,如链式爆炸一般,一发不可收拾myevent-myhander-OutPut
            }
        }
    }
     class Program
    {
        static void Main(string[] args)
        {
            MyEventArgs e1 = new MyEventArgs();
            e1.sentence = "我也会自定义事件了!!!";
            B b = new B();
            A a = new A(b);
            b.callevent(e1);

        }
    }
}

时间: 2024-10-11 06:31:07

C#之事件初步的相关文章

Dom事件初步了解

1.事件流 事件流可以分为两种:事件冒泡和事件捕获 1. 事件冒泡就是从目标元素一直冒泡到根元素html(IE和DOM浏览器都有) 2. 事件捕获就是从根元素到目标元素(DOM浏览器支持) 2.事件处理 1.HTML的事件处理,如下 <div class="btn" onclick="showME()">点击我</div> 把点击事件放入到标签内部这样不好就是行为和建构耦合在一起了,不好维护 2.DOM0级的事件处理 <div clas

事件初步学习

假设有一个类(MailManager)它负责接收电子邮件,MailManager类公开一个NewMail事件,当接收到新的邮件时会触发NewMail事件,造成邮件分发给邮件处理对象(Fax类和Pager类的对象). 第一步:定义类型来容纳邮件所有需要发送给邮件处理对象(Fax类和Pager类的对象)的信息: class NewMailEventArgs:EventArgs// { private string from;//邮件发出人 private string to;//邮件收取人 priv

C#基础——事件初步

事件是C#语言的重要成员之一,初学者往往不能很好的去理解和运用事件,特别是自定义事件.在这里将以较简单的方式呈现事件最基本的用法. 1.事件的定义 给事件下个准确的定义是一个较困难的事,这里我暂且给它定义为:事件是两个对象之间的交互行为,这里关注四个字“两个对象”.不理解不要紧,这样定义本身并不准确.,继续往下看. 事件定义之前先声明一个委托,然后声明一个事件: //声明委托 public delegate void GetStrHandler(string x, string y); //声明

iOS项目日志1-联系人列表

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 今天开始记录一下自己写的每一个项目的日志 下面就是联系人列表的日志 在SB中 做好初步的视图构建 设置segwe的id 设置观察者,观察每一个textfield的数值变化 然后设置好 观察方法textchange 设置segwe的实现 最后实现点击事件 初步实现 基本

php基础学习笔记javascript(5)

字符串中的特殊字符: 在js中,双引号字符串中的双引号内容和单引号字符串中的单引号内容都必须进行转移,形式如下: var str1 = "my mother say:\"don't speak with stranger\". "; var str2 = 'my mother say:"don\'t speak with stranger". '; js中的常用转义字符有: “ ? \” ‘ ? \’ 回车符 ? \r 换行符 ? \n tab符

20 考研英语题源外刊精讲赏析 11~20 期外刊原文+翻译+点评

11-<帮助低技能人员应对机器人崛起> 本文选自 Financial Time<s 金融时报>2019.01.30文章 Help the low-skilled ride out the rise of therobots(帮助低技能人员应对机器人崛起) . 文章针对通常看法“需提升劳动人口技能以应对自动化浪潮”指出, 现实中技能提升的机会往往向高学历者倾斜, 应为真正面临危机的低学历者提供再培训的机会. 主要亮点: ①“自动化对人类工作的影响”是时代热议话题, 具有现实意义: ②

Release编译模式下,事件是否会引起内存泄漏问题初步研究

记:不常发生的事件内存泄漏现象 想必有些朋友可能也常常使用事件,但是很少解除事件挂钩程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,我们静态可以做一个实验来再次验证下.为了验证这个问题,我一度怀疑自己代码写错了,甚至照着书上(网上)例子写也无法重现事件引起内存泄漏的问题,难道教科书说错了么? 首先来看看我的代码,先准备2个类,一个发起事件,一个处理事件: class A { public event EventHandler ToDoSo

初步理解JS的事件机制

一.事件流(捕获,冒泡) 事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒泡和捕获则描述了两种不同的顺序. DOM2级事件规定事件流包括三个阶段,如图: 假如我们点击一个div, 实际上是先点击document,然后点击事件传递到div,而且并不会在这个div就停下,div有子元素就还会向下传递,最后又会冒泡传递回document,如上图 为了兼容更多的浏览器,非特殊情况一般

C#学习之初步理解委托、事件、匿名方法和Lambda

最经在学习LinqtoSql,然后扯到Lambda表达式,然后扯到匿名方法,然后扯到委托,最后扯到事件处理...后来发现对委托这个概念和事件处理这个过程理解得不是很清晰,遂得一下学习笔记.那里说得不对,请大家多多指教! 第一部分:理解委托 委托委托,顾名思义,就是类似于中间人的意思,有些事情你不做,委托别人去做,比如你想相亲,但你不想去主动约女孩子,那你可以交给媒婆去帮你约. 如果你学过C++,请把委托理解成函数指针,都是为了调用函数.函数指针可以调用符合该函数指针要求的函数.什么叫符合该函数指