C#中取消了指针的概念。对指针恋恋不舍的程序员可以有两种解决方法:声明“非安全”(unsafe)代码段然后在其中使用指针或者使用C#的一个引用类型——“代理”(delegate)。“代理”相当与C中的函数指针原型,区别是C#是类型安全的。

“代理”(delegate)(代表、委托):“代理”是类型安全的并且完全面向对象的。
(1)在C#中,所有的代理都是从System.Delegate类派生的(delegate是System.Delegate的别名)。
(2)代理隐含具有sealed属性,即不能用来派生新的类型。
(3)代理最大的作用就是为类的事件绑定事件处理程序。
(4)在通过代理调用函数前,必须先检查代理是否为空(null),若非空,才能调用函数。(5)在代理实例中可以封装静态的方法也可以封装实例方法。
(6)在创建代理实例时,需要传递将要映射的方法或其他代理实例以指明代理将要封装的函数原型(.NET中称为方法签名:signature)。注意,如果映射的是静态方法,传递的参数应该是类名.方法名,如果映射的是实例方法,传递的参数应该是实例名.方法名。
(7)只有当两个代理实例所映射的方法以及该方法所属的对象都相同时,才认为它们是想等的(从函数地址考虑)。
(8)多个代理实例可以形成一个代理链,System.Delegate中定义了用来维护代理链的静态方法Combion,Remove,分别向代理链中添加代理实例和删除代理实例。
(9)代理的定义必须放在任何类的外面,如delegate int MyDelegate();而在类的方法中调用MyDelegate d = new MyDelegate(MyClass.MyMethod);来实例化自定义代理的实例。
(10)代理三步曲:
  a.生成自定义代理类:delegate int MyDelegate();
  b.然后实例化代理类:MyDelegate d = new MyDelegate(MyClass.MyMethod);
  c.最后通过实例对象调用方法:int ret = d();

转载于:https://www.cnblogs.com/guoxiaocong/archive/2005/11/05/269540.html

C#中的代理(delegate)[转载]相关推荐

  1. 一篇文章 学会 iOS中的 代理(delegate) 设计模式

    代理设计模式,真是挺耐人寻味的,感觉很让人捉摸不透又感觉很有趣的东西!因为原本捉摸不透的代码,方法,披上代理的外衣后,就很有道理,很有意思了! 各种设计模式,让本来很死板的代码变得灵活多变,各种功能可 ...

  2. C#中的代理(Delegate)

    C#代理实际上类似于C++中的函数指针,因为C#中不存在指针,所以用代理可以完成一些原来在C++中用函数指针完成的操作,例如传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m.但 ...

  3. 在C#中使用代理的方式触发事件 (委托和事件 ) (转)

    From:  http://www.cnblogs.com/gzhnan/articles/1859477.html 在C#中使用代理的方式触发事件 (委托和事件 ) 事件(event)是一个非常重要 ...

  4. iOS 13 Xcode11 中的 Scene Delegate

    如果将Xcode更新到11, 创建项目.默认会创建SceneDelegate.swift, 那么问题来了, 这个代理用来干嘛的了? 在这篇文章中,我们将探索iOS13和Xcode11的改变.我们着重介 ...

  5. Android平台Chromium net中的代理配置信息获取

    在计算机网络中,代理服务器 扮演着发起请求的客户端与服务器之间的中间人的角色.客户端连接到代理服务器,请求一些服务,比如文件,网页,或其它可以从服务器获得的资源,代理服务器以简化和控制复杂度的形式获取 ...

  6. OkHttp3中的代理与路由

    HTTP请求的整体处理过程大体可以理解为, 建立TCP连接. 如果是HTTPS的话,完成SSL/TLS的协商. 发送请求. 获取响应. 结束请求,关闭连接. 然而,当为系统设置了代理的时候,整个数据流 ...

  7. qml 信号槽第二次才响应_QML中各种代理的用法

    前言 当使用模型与视图来自定义用户界面时,代理在创建显示时扮演了大量的角色.在模型中的每个元素通过代理来实现可视化,用户真实可见的是这些代理元素. 代理 每个代理访问的索引号或者或绑定属性一部分来自数 ...

  8. 【原创】ObjectARX中的代理对象

    何谓代理对象? 当主应用程序没有加载时,打开了存在该应用程序中定义的对象的DXF或DWG文件,ACAD就必须为其创建一个代理对象,并支持对其很简单.基本的操作 既然没有加载主应该程序,那么代理对象怎么 ...

  9. Entity Framework 6 Recipes 2nd Edition(9-7)译-在WCF服务中序列化代理

    9-7. 在WCF服务中序列化代理 问题 从一个查询里返回一个动态代理对象,想要把它序列为一个POCO(Plain-Old CLR Objects)对象. 实现基于POCO实体对象, 在运行时,EF会 ...

最新文章

  1. python画图,使用matplotlib和seaborn来设置图形的字体大小,坐标轴的线宽,风格,取值范围
  2. 如何查看功能的源代码?
  3. js 点击最后一个 和倒数第二个_精选一组趣知识;最后一个节目是压轴还是压台...
  4. android 飞框动画,AndroidTV中实现飞框选中效果
  5. 【翻译】WPF中的数据绑定表达式
  6. 中国游戏公司研运一体发展专题分析2020
  7. Bootstrap前端框架
  8. 记一次授权的渗透测试
  9. 腐蚀rust服务器命令_服务器指令_腐蚀RUST基本指令及服务器指令大全_3DM单机
  10. 建筑CAD基础设计【1】
  11. 选个关注热度上升的大数据工具学习下吧
  12. 西游记中的第一神器是什么?
  13. android手机红外代码HAL,Android 红外遥控器适配
  14. S3C6410板子移植 Android2.2
  15. spring boot和spring cloud版本对应关系
  16. iPhone 13 哪便宜?拼多多百亿补贴!
  17. 201571030139/201571030134《小学生四则运算练习软件需求说明》结对项目报告
  18. 读书笔记:《流畅的Python》第17章 使用future处理并发
  19. React获取到用户当前位置
  20. c4d-界面介绍、1

热门文章

  1. Angular-搜索框及价格上下限
  2. 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)...
  3. JAVA card 应用开发(二) 在项目添加APPLET
  4. Objective-C:在类中设置不同协议
  5. 闲谈IPv6-典型特征的一些技术细节
  6. 在Powerpoint中插入Flash的方法
  7. 2009下半年网络管理员试题及答案
  8. 发布一个用于WinCE的矢量图控件
  9. 前端开发者必备的Nginx知识
  10. 远程连接身份验证错误,又找不到加密Oracle修正