C# 委托 代理

C# 委托、代理



举例如下

B的show方法绑定到A的show方法,使得A在show时B也show

C#中委托代理用法

  1. 定义delegate对象类型,如:

    public delegate void myEventHandler(object sender ,EventArgs e);

    其中 sender代表触发事件的本身,EventArgs 是事件参数类

  2. 定义事件参数类,这个可以做也可以不做,看需求,如果需要传递一些信息,可以扩展EventArgs 类,如

    public myEventArgs : EventArgs{/这里可以定义一些需要的变量,和方法/}

    在传入时应该会自动上溯造型。(会吗?肯定会啊,我自己试过了)

  3. 用event关键字定义事件对象,它同时也是一个delegate对象,在绑定时要对该类的这个对象进行绑定(这个对象是一个event,也是一个delegate,也就是它包含是否绑定了事件)

    public event myEventHandler show;

  4. 要被绑定的方法,也就是B的show这里的show定义和1中的delegate对象有相同的参数和返回值类型(这里呢如果扩展了EventArgs类,对B中的写法是随意的,反正可以上溯造型,恩,我试过了)如:

    public void show(object sender ,EvnetArgs e){/TODO/}

  5. 绑定,绑定的方式就是对当前的show对象+=比如:

    this.show += new myEventHandler((new B()).show);

    这里的问题是在哪绑定,可以在A中绑定,传入B或者像这样新建一个B也可以在B中绑定,在B中传入A或者新建一个A,这里的问题是一定要代码可以走到绑定;

  6. 写A 的触发事件show,并在show中调用delegate
    1. public void OnShow(){
    2. if(this.show!=null)//判断是否绑定了方法,如果绑定了那就执行呗;
    3. this.show(this,new EventArgs());
    4. }
  7. 整个过程写完了,现在就是触发A的OnShow就可以了

参考了寒飞雨的博文

同时附上一片比较好懂的代码修改自上述作者

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Delegate {
  5. // 扩展EventArgs 如果不需要可以不用
  6. public class myEventArgs:EventArgs{
  7. public int k= 10;
  8. }
  9. class Dog {
  10. public Dog(){
  11. Host host = new Host();
  12. this.Alarm += new AlarmEventHandler(host.hostEventHandler);
  13. }
  14. //delegate
  15. public delegate void AlarmEventHandler(object sender , myEventArgs e);
  16. //event
  17. public event AlarmEventHandler Alarm;
  18. // yinfa shijian de hanshu
  19. public void OnAlarm(){
  20. Console.WriteLine("dog Aalrt");
  21. if(this.Alarm!=null){
  22. this.Alarm(this,new myEventArgs());
  23. }
  24. }
  25. }
  26. class Host{
  27. public void hostEventHandler(object sender,EventArgs e){
  28. Console.WriteLine("Host konwn");
  29. // Console.WriteLine(((myEventArgs)e).k);//扩展EventArgs后
  30. /*DOTO*/
  31. }
  32. }
  33. class Delegate{
  34. public static void Main(String []args){
  35. Dog dog = new Dog();
  36. dog.OnAlarm();
  37. Console.ReadKey();
  38. }
  39. }
  40. }

markdown复制过去之后会有行号,卧槽 血崩;

来自为知笔记(Wiz)

时间: 2025-01-31 07:42:00

C# 委托 代理的相关文章

swift详解之十一------------协议、委托(代理)模式

协议.委托(代理)模式 注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用.是一个非常重要的模块 看下官方的定义:协议定义了一个蓝图 , 规定了用来实现某一特定工作或者功能所必须的方法和属性,类.结构体.或者枚举类型都可以遵循协议, 并提供具体实现来完成协议定义的方法和功能 . 任意能够满足协议要求的类型都被成为遵循了这个协议 1.协议的语法 协议的关键字:protocol 协议的语法: protocol Pro1{ //这里定义属性或者方法 } 要使一个类或者结构体遵循某个协议 ,

iOS中 委托 代理 协议 的理解

1.协议:协议不是类,是一种约定,他声明的方法和属性,都是独立于其他任何特定的类,并本身不会去实现他,让使用他的类去实现他,比如UITableView,需要实现他的cellForRowAtIndexPath等协议,谁用谁知道. 协议的两个预编译指令@optional:可以选择的方法.@required:必须执行的方法. 我们打开UITableView的头文件,看下他的声明: @protocol UITableViewDataSource<NSObject> @required - (NSInt

Swift 委托/代理设计模式

Swift 中的委托/代理模式(以下简称"代理模式")与object-c的代理模式基本一致. 代理模式的基本思想就是将我(类或者结构体等)需要来完成的工作交给(委托给)另一个有我所规定的做这项工作能力的人(符合要求类型的对象等)来处理. 代理模式的实现需借助于我们上一篇文章所讲的协议.我们定义一个协议来封装那些指定的方法(做这项工作的能力),使实现这些协议的类等拥有这些方法,我们就可以将工作委托给他来处理. 举个实际例子,比如我要去租房,首先我是有租房的能力,但是我没有时间或者其他原因

JS中的事件委托/代理详解

概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了,借花献佛,我摘过来,大家认真领会一下事件委托到底是一个什么原理: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM

C# 委托学习笔记

接触委托 代理 delegate很久啦.除了看API,Kotoba也给我讲了 .说到委托,拿下面这个小例子比较好.(14年6月26花花给我的练习) 实例:写一个方法A,定义个方法B(打印hello),和方法C(打印world),其中我只允许调用方法A.实现,1秒后打印出hello,3秒后打印出world. 先说一下回调的好处: 在开发中我们有些代码呢,是很固定的,但又有一些东西很灵活很容易发生变动.先假设B和C都不是我们自己写的,而是其他人已经写好的其他方法,所以我们在无BUG的情况下,尽可能不

毕业生必须知道:干部身份、三方协议、派遣证、人事代理、户口迁移 、编制、工龄、签约、档案

学校里关于毕业生的会也已经开了一大堆,耳朵也长膙了,嘴唇也磨薄了,很多人随大流听听看看,可真正重要的一些东西相信有很大一部分人却没有搞懂.如果不 信,你可以问问自己,什么叫三方协议?三方协议和谁签?有什么用?户口和三方又有什么关系?当一个个问题逐一提出来时,你可能已经开始觉得发虚. 在这里,我想简单的说一说我目前所知道的关于这方面的一些问题,相信肯定有很多不全面的地方,但至少相信可以帮帮你. 首先是大学毕业后的人生基本规划(本处所指为非在职考研.考博.考公务员等同学): 大学毕业后的一年最为关键

Java核心技术点之动态代理

本篇博文会从代理的概念出发,介绍Java中动态代理技术的使用,并进一步探索它的实现原理.由于个人水平有限,叙述中难免出现不清晰或是不准确的地方,希望大家可以指正,谢谢大家:) 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的:其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”.我们把微商代理

十分钟理解Java中的动态代理

十分钟帮助大家理解Java中的动态代理,什么是动态代理?感兴趣的小伙伴们可以参考一下 若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. 一.概述1. 什么是代理我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家"委托"代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,"委托

进击的雨燕--------------协议

详情转自:http://wiki.jikexueyuan.com/project/swift/chapter2/07_Closures.html 协议定义了一个蓝图,规定了用来实现某一特定工作或者功能所必需的方法和属性.类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能.任意能够满足协议要求的类型被称为遵循(conform)这个协议. 除了遵循协议的类型必须实现那些指定的规定以外,还可以对协议进行扩展,实现一些特殊的规定或者一些附加的功能,使得遵循的类型能够收益. 协议