c#委托事件入门--第二讲:事件入门
上文 c#委托事件入门--第一讲:委托入门 中和大家介绍了委托,学习委托必不可少的就要说下事件。以下思明仍然从事件是什么、为什么用事件、怎么实现事件和总结介绍一下事件
1、事件是什么:.
1.1 NET事件建立在委托机制之上,事件是对委托的封装。
1.2 事件的分类: 强类型事件和弱类型事件
2、为什么用事件:
从上文委托入门介绍中我们可以了解到,我们可以在客户端随意对委托进行操作,一定程度上破坏了面向对象的封装机制,因此事件的出现就是为了实现对委托的封装
3、怎么实现事件:
其实事件的定义很简单,但是需要依赖委托:关键字event就是事件的标识
/// <summary>
/// 1、定义一个委托
/// </summary>
/// <param name="x"></param>
public delegate void BoilHandler(int x); /// <summary>
/// 2、声明一个事件
/// </summary>
public event BoilHandler boilHandler;
也就是在上文介绍委托入门的代码中。声明一个委托的方法上加上关键字event即可,
完整代码如下:
using System; namespace DelegateDemo
{
public class Program
{
public void Write1(int x, int y)
{
Console.WriteLine("{0}+{1}={2}", x, y, x + y);
} public static void Write2(int x, int y)
{
Console.WriteLine("{0}*{1}={2}", x, y, x * y);
} static void Main(string[] args)
{
GManage gm = new GManage();
gm.delegate1 += new Program().Write1; //先给委托类型的变量赋值
gm.delegate1 += Program.Write2; //给此委托变量再绑定一个静态方法
gm.SayHello(, ); // 将先后调用 Write1 与 Write2 方法 Console.WriteLine("******解绑方法Write2后******");
gm.delegate1 -= Program.Write2; // 委托方法解绑
gm.SayHello(, ); // 解绑后只会调用 Write1
Console.ReadKey();
}
} public class GManage
{
/// <summary>
/// 1、定义委托,它定义了可以代表的方法的类型
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public delegate void GreetingDelegate(int x, int y); /// <summary>
/// 2、声明一个事件
/// </summary>
public event GreetingDelegate delegate1; /// <summary>
/// 3、被调用委托的方法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public void SayHello(int x,int y)
{
if (delegate1 != null) //如果有方法注册委托变量
{
delegate1(x, y); //通过委托调用方法
}
}
}
}
但是在实现注册的时候和委托的注册不一样,因为事件仅仅提供了 += 和 -= 两个对外的方法来实现方法的绑定和解绑,如果依旧使用 赋值符号 = ,程序即将报错。
4、总结
事件的本质就是委托,向外提供两个访问方法add_EventName(对应+=)和remove-EventName(对应-=)来实现方法的绑定和解绑,同时更符合面向对象的封装性和安全性。
码字不容易,转载请注明出处。谢谢
源码链接:https://github.com/YaoHigh/DelegateDemo
c#委托事件入门--第二讲:事件入门的更多相关文章
- NoSQL入门第二天——Redis入门介绍
一.基本概述 1.是什么 Redis:REmote DIctionary Server (远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议, 是一个高性能的(key/value)分布 ...
- Linux入门第二天——基本命令入门(中)
一.文件搜索命令 1.文件搜索命令:locate 速度很快(具体见Linux工具网址的对比),注意无法找到新建的文件(原理暂不展开) locate命令其实是“find -name”的另一种写法,但是要 ...
- Linux入门第二天——基本命令入门(下)
一.帮助命令 1.帮助命令:man (是manual手册的缩写,男人无所不能,/笑哭) 更多man用法以及man page的用法,参见:http://www.linuxidc.com/Linux/20 ...
- Linux入门第二天——基本命令入门(上)
一.常用命令介绍 常见命令可参考:http://man.linuxde.net/ http://linux.51yip.com/ 请对照参考! 常用的快捷键:http://blog.csdn.net/ ...
- 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的
[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...
- WPF自学入门(三)WPF路由事件之内置路由事件
有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...
- Knockoutjs 实践入门 (2) 绑定事件
Knockoutjs 绑定事件 Knockoutjs 不仅支持UI 元素的属性绑定到model的属性,还支持UI 元素的事件绑定model的事件. 需求: l click me button 每单击 ...
- jQuery入门基础(事件、DOM操作)
http://www.w3school.com.cn/b.asp 一.事件 1.常规事件——把js事件前面的on去掉 比如:js:onclick——JQuery:click 下面是 jQuery 中事 ...
- 第二章 NIO入门
传统的同步阻塞式I/O编程 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞(AIO)编程 为什么要使用NIO编程 为什么选择Netty 第二章 NIO 入门 2.1 传统的BIO编程 2.1.1 ...
随机推荐
- 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例
一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...
- TCP/IP协议栈(三)——linux 向下的报文处理
应用程序连接服务器时,目的地套接字地址(端口号和IP地址)以参数形式传递给系统调用connect(tcp_v4_connect()).下面逐步介绍初始化该连接 检查内核路由表,查找给定目的地IP地址路 ...
- 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...
- HTML学习 表格和表单
<table></table> 表格标签 width 宽度 border 边框 cellpadding 内容和单元格之间的 ...
- IIS Express总结
IIS Express可以说是.NET web开发者必用的服务器,日日夜夜都和它打交道.一直以来,除了遇到什么点什么问题,很少会去关注过它. 今天看到以前转载的一篇博客,就再次温故下,主要包含IIS ...
- Head First设计模式之中介者模式
一.定义 又称为调停者模式,定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. 二.结构 组成: ● 抽象中介者(M ...
- Python+selenium+eclipse+pydev自动化测试环境搭建
一. 安装python 1.下载安装python 可访问python的官方网站:http://www.Python.prg找到下载页面下载需要的版本,可下载python2.x或者pyth ...
- Java基础day01
linux:1免费 开源的操作系统,Java主要是服务器端的开发 2与window,目录结构.安全性比后者高 3常用命令 pwd.ls.cd:vi(打开一个记事本若没有就新建一个记事本) 绝对路径:都 ...
- Windows服务器安装Memcache缓存服务及PHP扩展
一.Windows服务器安装Memcache缓存服务,需要下载windows稳定版Memcache程序memcached.zip,下载后解压到自定义服务目录,如D:\phpStudy\tools\me ...
- AVFoundation 框架初探究(二)
接着第一篇总结 系列第一篇地址:AVFoundation 框架初探究(一) 在第一篇的文章中,我们总结了主要有下面几个点的知识: 1.对AVFoundation框架整体的一个认识 2.AVSpeech ...