c#进阶之Delegate

委托是什么?答:委托是一种类型   等同与 一个class类,继承System.MulticastDelegate,但mult....gate是一个特殊类,不能够派生

委托的调用,如何去使用

1/委托名.Invoke();

2/委托名();

3/委托名.BeginInvoke(null,null);

3.调用的方法与委托的参数签名一致

为什么需要委托,为什么会有委托?

答:1.例如 需要造一个车,其他的都一样,只是发动机不同,那么发送机很复杂,那么我们可以将发送机外包出去,我们只需要调用创造发动机的方法就可以了,这里就可以用委托

2.可以解耦

看一下下图,那么通过+=是怎么执行的?-=是怎么执行的?

1.+=是一个一个按照顺序执行

2.-=是从后往前进行匹配,找到第一个吻合的就移除,且只移除一个,找不到也不会异常。若是匿名方法,那么通过-=也不会被删除

同样的,若是写成 new Stuent().Study;那么通过-=也不会被删除。

3.有一个限制:如用-=,那么必须保证 是用一个实例同一个方法。

什么是多播委托?

1.第一种:通过遍历.(可以把beginInvoke修改为invoke也可以)

2.+=,-=都算是多播委托

委托主要用于观察者模式?

答:是的。

事件是一种委托么?

答:是的。

如何定义一个事件?

如何使用事件?

答:因为是委托,所以和原来一样去使用和调用。

委托和事件的区别是什么?有什么联系?

1、事件是一个委托的实例,委托是一种类型

2、事件,控制了实例的使用权限,更加安全。

为什么要用事件?事件有什么用呢?

从第一幅图可以看到 在外部(另一类文件)事件可以Invoke()以及赋值。但是事件是不被允许的。

从第二幅图可以看到 在内部(同一类文件)事件可以Invoke()以及赋值,当然委托也是可以允许的。

第一幅图:

第二幅图:

时间: 2024-08-09 21:46:55

c#进阶之Delegate的相关文章

iOS进阶_地图上定位的标志——大头针

一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大头针类,我自定义的为MyAnnotation 大头针: 在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”.只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置).title(标题).subtitl

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.NET中快带序列化和反序列化.最后介绍在使用.NET序列化JSON过程中的注意事项. 读前必备: A.泛型       [.net 面向对象编程基础]  (18) 泛型 B.LINQ使用  [.net 面向对象编程基础] (20) LINQ使用 1. 关于JSON JSON的全称是”JavaScrip

[.net 面向对象程序设计进阶] (5) Lamda表达式(一) 创建委托

[.net 面向对象程序设计进阶] (5) Lamda表达式(一)  创建委托 本节导读: 通过学习Lambda表达式,学会创建委托和表达式目录树,深入了解Lambda的特性,让你的代码变的更加清晰.简洁.高效. 读前必备: 本节学习前,需要掌握以下知识: A.泛型        (请参考[.net 面向对象编程基础]  (18) 泛型) B.Linq基础 (请参照[.net 面向对象编程基础] (19) LINQ基础) C.Linq使用  (请参照[.net 面向对象编程基础]  (20) L

基于 CoreText 的排版引擎:进阶

版权说明 原创文章,转载请保留以下信息: 本文节选自我的图书:<iOS 开发进阶>. 本文涉及的 Demo 工程在这里:https://github.com/tangqiaoboy/iOS-Pro. 扫码关注我的「iOS 开发」微信公众帐号: 本章前言 在上一篇<基于 CoreText 的排版引擎:基础>中,我们学会了排版的基础知识,现在我们来增加复杂性,让我们的排版引擎支持图片和链接的点击. 支持图文混排的排版引擎 改造模版文件 下面我们来进一步改造,让排版引擎支持对于图片的排版

IOS之--UI进阶-- 多控制器管理第一天

 iOS之--UI进阶-- 多控制器管理第一天 01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.xib:用来设置启动界面. Xcode7 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.storyBoard LaunchScreen原理: 会自动加载Launch

iOS原生地图开发进阶——使用导航和附近兴趣点检索

iOS原生地图开发进阶——使用导航和附近兴趣点检索 iOS中的mapKit框架对国际化的支持非常出色.在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将介绍两个更加实用的功能的开发:线路导航与兴趣点搜索.前几篇博客的链接如下: 地图基础用法详解:http://my.oschina.net/u/2340880/blog/415360. 添加大头针与自定义标注:http://my.oschina.net/u/2340880/blog/415441. 添加地图覆盖

IOS开发之--Core Data的使用(进阶)

CoreData的使用(进阶) 本次目标是创建一个应用程序,可以记录每次你保存的经纬度坐标,并且可以对这些坐标(我们保存为一个Event实体)进行编辑. 建立工程 步骤 创建一个Empty Application,起名叫Locations,选择Devices为iPhone,并且使用ARC: 添加CoreLocation.framework: 添加一个Storyboard文件,并在工程属性中选择Main Storyboard为这个文件: 至此,操作步骤完成. 对工程的理解 以上步骤完成后,我们的工

【前端学习笔记】JQuery事件细节、JQ进阶常用方法

事件细节----------------------- ev直接使用,不需要兼容操作 ev.pageX(Y) 鼠标的坐标(相对于文档) : ev.clientX(相对于窗口) ev.which(能监控鼠标键值) : ev.keyCode ev.preventDefault(); //阻止默认事件 ev.stopPropagation(); //阻止冒泡 事件函数结尾return false;既能阻止冒泡又能阻止默认事件 one() $('div').one('click',function(){

《iOS 高级编程》之Tableview进阶指南

本章内容: ●    学习如何进阶使用UITableView,带给应用更高级的观感(look and feel) ●    学习如何开发自己定制的UITableView类,模仿iMessage应用的观感 ●    为一个基于分组的UITableView实现下钻逻辑 在iOS应用中呈现数据时,UITableView可能是最经常使用的用户界面对象.在本章中,将学习到以超越标准实现的方式使用UITableView,并理解UITableView类的工作方式.你会创建一个聊天视图控制器,它支持定制的单元格