C#事件浅谈(需知委托)
2017-04-09 14:58
302 查看
学习面向对象也有几天了,自从看到接口那里就挺蒙的,完全听不懂,在网上看的视频,用了10分钟讲解事件,还举了一个不算简单的列子,真的是看的头疼,对于没有学过面向对象的鄙人来说,理解实在是困难。
今天看了许多CSDN中前辈的博客,以及某鸟教程的文档和MSDN的文档,刚开始其实看不太懂,不明白这个东西为啥一下就触发了。 话不多说,下面我们一起来看一下C#中的事件.
生活中处处有着事件,比如说你肚子饿了,就要去买饭,这个例子中,肚子饿了就是事件,买饭呢就是完成这个事件的过程,那么触发这个事件的就是你的肚子饿,你的肚子不饿是不会触发这个事件的。
例子是非常好理解的,那么来看一下事件的几个要点和声明过程。
1. 声明委托(事件与委托相关联)
2.声明事件(格式:event 返回值类型(委托类型) 事件) 其中event是事件的关键字,并编写实现的函数
3.注册事件或者取消事件 +=或者-=
4.判断条件触发事件(或者不判断)
using System;
public class MainClass
{
public delegate void Good();//声明一个委托,括号里面是可以带参数的,返回值类型也可以不同
class Experiment
{
public event Good Event;//声明了一个事件,返回值是委托类型
public void judge()//判断委托是否为空
{
if (Event != null)
{
Event();//不为空则触发事件
}
else
{
Console.WriteLine("No");
}
}
public void fun()//这个是实现的事件的函数
{
Console.WriteLine("YES");//事件内容
}
}
public static void Main()
{
Experiment e = new Experiment();//实例化
e.Event += new Good(e.fun);//注册了一个事件
先看主函数,在主函数中把Experiment这个类实例化,通过访问这个类中的事件名 注册了一个事件,这个事件就是调用方法fun,然后呢访问这个类中的judge判断方法
再看Experiment中的内容,首先访问的就是judge方法,判断Event中是否注册了事件,如果没有那么此时Event是空,则输出NO,然而我们在Main中通过+=注册了一个函 数,判断不为空,Event(); 触发事件。
事件中的内容就是调用fun函数,所以最后的输出结果是YES
总结:
事件在winform中非常重要,比如你做了一个桌面应用的程序,上面有很多按钮,每点击一个按钮触发什么功能都可以用事件来写,还可以连续触发多个功能,在事件中委托也是非常重要的。在做的过程中建议最好判断一下事件内容是否为空,个人感觉看起来舒服一点。
本人也是新手,如文中有任何不适的地方,欢迎提出。
今天看了许多CSDN中前辈的博客,以及某鸟教程的文档和MSDN的文档,刚开始其实看不太懂,不明白这个东西为啥一下就触发了。 话不多说,下面我们一起来看一下C#中的事件.
生活中处处有着事件,比如说你肚子饿了,就要去买饭,这个例子中,肚子饿了就是事件,买饭呢就是完成这个事件的过程,那么触发这个事件的就是你的肚子饿,你的肚子不饿是不会触发这个事件的。
例子是非常好理解的,那么来看一下事件的几个要点和声明过程。
1. 声明委托(事件与委托相关联)
2.声明事件(格式:event 返回值类型(委托类型) 事件) 其中event是事件的关键字,并编写实现的函数
3.注册事件或者取消事件 +=或者-=
4.判断条件触发事件(或者不判断)
using System;
public class MainClass
{
public delegate void Good();//声明一个委托,括号里面是可以带参数的,返回值类型也可以不同
class Experiment
{
public event Good Event;//声明了一个事件,返回值是委托类型
public void judge()//判断委托是否为空
{
if (Event != null)
{
Event();//不为空则触发事件
}
else
{
Console.WriteLine("No");
}
}
public void fun()//这个是实现的事件的函数
{
Console.WriteLine("YES");//事件内容
}
}
public static void Main()
{
Experiment e = new Experiment();//实例化
e.Event += new Good(e.fun);//注册了一个事件
//如果在这里重复写了上一行的语句 那么触发事件时会把e.fun这个函数调用2次 可多次+= e.judge(); } }分析:
先看主函数,在主函数中把Experiment这个类实例化,通过访问这个类中的事件名 注册了一个事件,这个事件就是调用方法fun,然后呢访问这个类中的judge判断方法
再看Experiment中的内容,首先访问的就是judge方法,判断Event中是否注册了事件,如果没有那么此时Event是空,则输出NO,然而我们在Main中通过+=注册了一个函 数,判断不为空,Event(); 触发事件。
事件中的内容就是调用fun函数,所以最后的输出结果是YES
总结:
事件在winform中非常重要,比如你做了一个桌面应用的程序,上面有很多按钮,每点击一个按钮触发什么功能都可以用事件来写,还可以连续触发多个功能,在事件中委托也是非常重要的。在做的过程中建议最好判断一下事件内容是否为空,个人感觉看起来舒服一点。
本人也是新手,如文中有任何不适的地方,欢迎提出。
相关文章推荐
- 浅谈c#中的委托和事件
- 浅谈C#的委托和事件
- 浅谈C# 中的委托和事件
- 浅谈委托和事件之C#的事件模型
- C#里的委托和事件实现Observer
- C#中的组件-事件-委托
- C#中,对委托和事件的理解
- C#里的委托和事件实现
- 事件委托在C#的实现
- C#中的委托与事件
- C# 事件 委托 教程
- C#学习5-委托与事件
- 浅谈Java与C#的事件处理机制
- 用C++实现C#中的委托/事件(标准C++之升级版)
- C#体验·委托和事件
- C#委托及事件
- 深入理解C#编程中的组件-事件-委托
- C#里的委托和事件实现Observer
- 用 C++ 实现 C# 中的 委托/事件 (5-functor2)
- C#中的委托与事件[翻译](转)