C#事件2

今天又来说一下C#中的事件,为什么会有这个又呢?一个是因为以前写过一篇关于事件的东西,二来呢是因为感觉接口这个东西完全可以替换委托来写事件。因为这两个方面的原因,重新过了一遍C#中的事件。

事件这个东西C#中定义事件的是EventHandler这个委托,所以呢我们暂且按照C#这个模式写一个简单的事件,代码如下:

 

这个类很简单,一个汽车类,包含一个字段,以及其相应的属性,然后是构造方法,接下来是核心代码:定义了一个事件run,就是汽车跑起来的事件,然后定义了一个go方法这个go方法用于触发这个run事件

接下来我们定义了一个类来订阅这个run事件,如下:

 

这个类蛮好玩的,首先是字段和属性,分别是人的名字的人的汽车,然后是构造函数,构造函数注意一下第四行,这个地方是订阅了这个事件,这个事件的具体实现是在human中的doSthWhenCarRun()方法中来具体定义的。

好的废话不多说我们来看一下Main方法,然后来运行这个Console程序:

 

VeryVeryEasy的主函数,局势实例化了一个human,然后触发了human.Car的run事件。OK我们来看一下运行后的结果:

 

非常非常的简单的一个小程序。但是分析起来还是有好多想说的,那么下面我就来说一下:

这个Car呢,我们可以类比为我们平时写程序中的Button、Label、TextView、ComboBox、DropdownList、DataGridView、Gridview、CheckBox等等定义好的那些控件,Car中的run事件就相当于Button中的Click、TextView中的TextChanged、TextChanging(可能没有)、或者Combobox中的SelectedIndexChanged事件等等,无外乎触发的方法不同,Button用的捕获鼠标的点击,我们Car用的是go方法而已。理解了这个可以说就理解了这篇文章的50%;

接下来我们再看一下接下来的50%是什么------它就是我们的human类,human类跟我们平时用的什么类似呢?相当于我们WinForm中的Form、WebPage中的Page、WebForm中的Form,我们在创建一个窗体之后,我们肯定会拖动过来几个控件,这个过程可以说就是跟自己在human类中写一个Car是一样子的,不过是宇宙级的VisualStudio将这个写控件的事情编程了拖动,让我们更轻松的实现了。然后我们有了窗体,有了控件我们肯定会给窗体加几个事件,加事件也蛮简单:选中控件在属性列表中找到事件列表的选项卡,在改选项卡中选中指定的事件双击就可以了。这个同样是宇宙IDE给我们的便利,我们自己写代码则需要如上面我写的那样使用+=来注册一个事件了。最后要讲的是我上面的这个doSthWhenCarRun()这个方法是不是看着很眼熟啊?是的方法签名跟我们写Click啊、changed啊等等事件都是一样的,只不过我们平时都称他们是事件体,是的他们不是事件,他们本质上是一个方法。

至此,100%的核心知识点讲完了。不得不说宇宙级的IDE就是宇宙级的IDE,微软这个做的确实蛮屌的,不论是使用人数很多的Eclipse、收费的各种Storm,都没有这种拖动实现的便捷功能。要说的AndroidStudio做的也有这个拖动的功能,蛮厉害的。

最后的最后,回答一个上面我提到的用接口可不可以写出事件的功能呢?我的答案是Yes,接下来我将粘贴改造后用接口实现的新的Car类,如下:

 

接下来看一下改写后的human2类,如下:

 

在Main方法中调用,如下:

 

我们看一下运行的结果:

 

哇哦-----真的完全一样唉!

至此本来应该结束了,但是呢好不容易写了这么牛X的一个东西,还想啰嗦几句:我们看新闻的时候总是听到说要增强四个自信,哪四个自信呢:社会主义的理论道路自信、理论自信、制度自信、文化自信,我们搞C#的也一样要增强我们的四个自信:C#语言自信、理论自信、IDE自信、文化自信,祝愿C#的明天更美好!

原文地址:https://www.cnblogs.com/huangwuyi/p/8880156.html