一直以来对于C#语言都是浅尝辄止,并没有深刻的理解,今天下午看了一篇关于事件的文章,看的也是云里雾里,自己终于下决心来写一个简单的程序来理解一下C#中事件的用法,这个例子选用了中国话里面的一个成语”鸡飞狗跳“,准备定义两个类:鸡和狗,他们一个做为发布者Publisher,一个做为订阅者Subscriber,具体的对应关系下面来说,首先来定义这两个类。
- 定义鸡和狗这两个类,这个类属性比较一致,需要用的的信息比较少,我们定义一个动物的基类如下:
-
在这个共同的基类的基础上我们定义一下鸡和狗,如下:
-
就是简单的定义了两个构造函数,给动物起了一个名字,并且制定了动物叫的声音。
-
接下来我们来分析“鸡飞狗叫”这个场景,一定是有一只鸡,一只狗,当鸡飞的时候,狗开始叫。那么鸡应该有一个事件是飞,那么狗应该订阅了这个飞的事件,然后狗开始叫这个动作,好的接下来我们可以简单的描述为如下:
- 接下来我们再鸡的类中定义一个飞的事件,如下:
-
public event EventHandler flying;
就是这么简单的一句话就定义好了这个“飞”的事件,同时定义好事件后呢,还需要有一个方法来发布这个事件,这个方法也很简单,如下:
public void chickflying()
{
Console.WriteLine(name + "begin begin flyinging:");
if (flying != null)
{
flying(this, new EventArgs());
}
}
这样就定义好了这个发布这个事件的方法,现在完整的鸡类如下:
- 接下来我们来看我们的狗这个类,在鸡飞的时候我们需要狗来叫的,这个时候我们来定义一下狗叫的这个动作。在定义这个狗叫的动作的时候,我们需要注意一下,这个动作是要订阅到鸡飞这个事件上的,我们需要定义的是狗叫的这个动作参数服务鸡飞的事件所要求的格式,如下:
- 接下来我们需要做的声明两个类的实例,并且将狗叫这个动作订阅到鸡飞这个事件上面,如下:
-
在这个代码中 我们首先声明了一只名叫“Ruby”的鸡,接着我们声明了一只名叫“旺旺”的狗,并且制定了 “Ruby”和“旺旺”的叫声;
接下来第三行的代码就是订阅这个事件的写法,这里用到了+=,当然能看这个文章的人都懂+=、-=,以及这个可以多次累加,这里不解释这个了。
第四行的代码就是“Ruby”这只鸡开始飞了。
最后是习惯性的over+read;
- 最后我们看一下运行的结果: