• 事件基于委托存在,事件是类的成员
  • 事件不能在类外调用,虽然我们可以在类中声明事件为public,但实际编译代码时永远都是private,并且是private的委托(事件的本质就是委托)
  • 定义事件处理方法,它与delegate对象具有相同的参数和返回值类型
  • 定义事件时,发生者首先要定义委托,然后根据委托定义事件:
public delegate void SayHello(string name);

public event SayHello hello;
  • 注册事件:
public void ToHelloAmerican(string name)
{
Console.WriteLine(name+",Welcome To American");
}
public void ToHelloChinese(string name)
{
Console.WriteLine(name + ",欢迎来中国");
}

static void Main(string[] args)
{
Hello h = new Hello();
h.hello += h.ToHelloAmerican;
h.hello += h.ToHelloChinese;
h.ToHello("Selinda");
Console.ReadKey();
}

  • 触发事件:事件只能被所属的类调用,可以通过其他类向事件注册方法
public void ToHello(string name)
{
hello(name);
}

-----------------------------------------------------------------------------------------------
源代码如下:(类外注册事件)
public delegate void SayHello(string name);
class Hello
{
public event SayHello hello;
public void ToHello(string name)
{
hello(name);
}
public void ToHelloAmerican(string name)
{
Console.WriteLine(name+",Welcome To American");
}
public void ToHelloChinese(string name)
{
Console.WriteLine(name + ",欢迎来中国");
}
}
class Program
{
static void Main(string[] args)
{
Hello h = new Hello();
h.hello += h.ToHelloAmerican;
h.hello += h.ToHelloChinese;
h.ToHello("Selinda");
Console.ReadKey();
}
}

-----------------------------------------观察者模式------------------------------------------
  • Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。
  • Observer设计模式中主要包括两类对象:观察者、被观察对象。
  • 以下代码:观察者(报警器、显示频)、被观察对象(温度)
public delegate void BoilEventHandler(int temperature);
class BoilWater
{
public event BoilEventHandler Boil;
public int temperature = 0;
public void OnBoilWater()
{
for (int i = 0; i < 101; i++)
{
temperature = i;
if (temperature > 95&&Boil!=null)
{
Boil(temperature);
}
}
}
public void Ring(int tem)
{
Console.WriteLine("报警器:"+tem);
}
public void Show(int tem)
{
Console.WriteLine("显示器:"+tem);
}
}
class Program
{
static void Main(string[] args)
{
BoilWater h = new BoilWater();
h.Boil += h.Ring;
h.Boil += h.Show;
h.OnBoilWater();
Console.ReadKey();
}
}
  • 委托类型的名称都应该以EventHandler结束。
  • 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型(观察者),一个 EventArgs类型(或继承自EventArgs,被观察对象)。
  • 事件的命名为 委托去掉 EventHandler之后剩余的部分。
  • 继承自EventArgs的类型应该以EventArgs结尾。

C#复习(十五)事件一_该用户还没想到昵称_新浪博客相关推荐

  1. Shader|GPU流水线_该用户还没想到昵称_新浪博客

    Shader运行于GPU上. Shader的类型主要有:顶点着色器(Vertex Shader).细分曲面着色器(Tessellation Shader).几何着色器(Geometry Shader) ...

  2. Java之蓝牙传送数据byte与String转换_该用户还没想到昵称_新浪博客

        最近开发人脸识别项目,因为谷歌眼镜太不给力了,调用摄像头不到半小时就会发热卡顿,所以捕捉人脸并识别的功能就不能依赖谷歌眼镜了,只能将其捕获的人脸图片通过蓝牙传给手机,在手机上进行识别后,再将信 ...

  3. Shader|OpenGL与DirectX_该用户还没想到昵称_新浪博客

      OpenGL和DirectX都是图像应用编程接口,这些接口用于渲染二维或三维图形.可以说,这些接口架起了上层应用程序与底层GPU的沟通桥梁.     一个应用程序向这些接口发送渲染命令,而这些接口 ...

  4. 普度网络营销策划_普度网络营销策划-齐宁_新浪博客

    标签: 杂谈 自媒体的盛行,让我们知道了文案的重要性.一条好的文案,可以让你的广告如虎添翼.一篇好的内容可以瞬间刷爆朋友圈.今天我要总结的就是如何做一个打动人内心心智的好文案. 文案最主要的目的是让消 ...

  5. 关于幂律分布的一个笔记_哈克_新浪博客

    关于幂律分布的一个笔记_哈克_新浪博客 关于幂律分布的一个笔记     (2011-03-02 18:12:27)     转载▼     标签:     幂律     二八法则     杂谈     ...

  6. [转载]环游澳大利亚18天——前传与攻略_我是亲民_新浪博客

    期待中,学习中... 原文地址:环游澳大利亚18天--前传与攻略作者:老湖 我一直以为自助旅行首先要走遍中国最美的地方,趁着年轻,徒步旅行中国最艰苦的美丽之地,老了之后,再去国外旅行,国外旅行先去比较 ...

  7. 智立方 想哪说哪62:命由己造_智立方的杨石头_新浪博客

    智立方 想哪说哪62:命由己造_智立方的杨石头_新浪博客 [呕像]有人问对昨天职來职往节目中粉丝送石头五百万求职的看法.理解那份热诚的心,石头也曾把前辈看成放光的神.但只有榜样没有偶像,从他们轨迹找到 ...

  8. 邓文迪撑杆跳,甩开老公要独立?_富杂志_新浪博客

    邓文迪撑杆跳,甩开老公要独立?_富杂志_新浪博客 邓文迪撑杆跳,甩开老公要独立? (2010-01-11 10:55:22) 转载▼

  9. cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客

    cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...

最新文章

  1. linux文件物理结构,文件物理结构和存储空间管理
  2. boost::strong_components用法的测试程序
  3. Java文本框只有一行数据,Java只允许输入数目字的文本框
  4. android源码包下载
  5. python 用命令安装pip_用pip命令安装Python第三方库
  6. Android程序中读取使用已有的SQLite数据库
  7. Golang Post传参调用示例
  8. qtreeview编辑节点文本_[我花2个月做了叙事短篇游戏]我是怎么做游戏编辑工具的...
  9. 重新认识javascript的settimeout和异步
  10. VS code 快捷键常用
  11. MacOS High Sierra(10.13.6)上安装xcode10.2.1
  12. 一日一命令:find 命令详解
  13. linux opengl安装教程,求OpenGL安装过程
  14. Markov Chains
  15. html 图片自动滚动播放,javascript+html5实现仿flash滚动播放图片的方法
  16. 黑马程序员——黑马学习日志之二十 Java高新技术(二)
  17. 开源 免费 java CMS - FreeCMS-1.5 站内信
  18. java用队列实现栈、用栈实现对队列
  19. 软件开发中如何理解人机料法环
  20. Qt Qss QPushButton[xxx = xxx]

热门文章

  1. Glassfish 安装配置
  2. 云端青柚UZ:将区块链技术切实落地,打造生态农业产业园
  3. QMUI 2 终于来了,真香
  4. Netbeans 'badly formed maven project' 问题
  5. Webpack 3 —— 了解
  6. Win10已重置应用默认设置解决方法
  7. 【考研复试】数据结构常见问题
  8. osmdroid 地图 加载离线地图资源包 zip格式
  9. php fping,fping - wangshaohui的个人页面 - OSCHINA - 中文开源技术交流社区
  10. 联通手机导航对阵车载导航