C# 委托 代理
2016-03-19 23:10
381 查看
C# 委托、代理
举例如下B的show方法绑定到A的show方法,使得A在show时B也show
C#中委托代理用法
定义delegate对象类型,如:
public delegate void myEventHandler(object sender ,EventArgs e);
其中 sender代表触发事件的本身,EventArgs 是事件参数类
定义事件参数类,这个可以做也可以不做,看需求,如果需要传递一些信息,可以扩展EventArgs 类,如
public myEventArgs : EventArgs{/这里可以定义一些需要的变量,和方法/}
在传入时应该会自动上溯造型。(会吗?肯定会啊,我自己试过了)
用event关键字定义事件对象,它同时也是一个delegate对象,在绑定时要对该类的这个对象进行绑定(这个对象是一个event,也是一个delegate,也就是它包含是否绑定了事件)
public event myEventHandler show;
要被绑定的方法,也就是B的show这里的show定义和1中的delegate对象有相同的参数和返回值类型(这里呢如果扩展了EventArgs类,对B中的写法是随意的,反正可以上溯造型,恩,我试过了)如:
public void show(object sender ,EvnetArgs e){/TODO/}
绑定,绑定的方式就是对当前的show对象+=比如:
this.show += new myEventHandler((new B()).show);
这里的问题是在哪绑定,可以在A中绑定,传入B或者像这样新建一个B也可以在B中绑定,在B中传入A或者新建一个A,这里的问题是一定要代码可以走到绑定;
写A 的触发事件show,并在show中调用delegate
public void OnShow(){
if(this.show!=null)//判断是否绑定了方法,如果绑定了那就执行呗;
this.show(this,new EventArgs());
}
[/code]
整个过程写完了,现在就是触发A的OnShow就可以了
同时附上一片比较好懂的代码修改自上述作者
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
// 扩展EventArgs 如果不需要可以不用
public class myEventArgs:EventArgs{
public int k= 10;
}
class Dog {
public Dog(){
Host host = new Host();
this.Alarm += new AlarmEventHandler(host.hostEventHandler);
}
//delegate
public delegate void AlarmEventHandler(object sender , myEventArgs e);
//event
public event AlarmEventHandler Alarm;
// yinfa shijian de hanshu
public void OnAlarm(){
Console.WriteLine("dog Aalrt");
if(this.Alarm!=null){
this.Alarm(this,new myEventArgs());
}
}
}
class Host{
public void hostEventHandler(object sender,EventArgs e){
Console.WriteLine("Host konwn");
// Console.WriteLine(((myEventArgs)e).k);//扩展EventArgs后
/*DOTO*/
}
}
class Delegate{
public static void Main(String []args){
Dog dog = new Dog();
dog.OnAlarm();
Console.ReadKey();
}
}
}
[/code]
markdown复制过去之后会有行号,卧槽 血崩;
来自为知笔记(Wiz)
相关文章推荐
- c#中调用windows api (按键精灵)
- C# 委托 代理
- 基于C#的单元测试(VS2015)
- C# kinect v2学习笔记(三)红外图像展示
- C#中使用TeeChart控件出现 不支持无窗口的Active控件 的解决方法
- c# 委托
- C#中的FTP类
- c#程序的阅读
- 【C#】WM 消息大全
- 软件工程-构建之法 理解C#一小段程序
- 【转】【C#】SendMessage
- C#编程之神奇程序找数
- C#---抽象类与接口
- 第一个C#程序--简易计算器
- C#实现注册码功能编程总结
- c#代码分析
- C# 千分位与两位小数点
- (转)C# 温故而知新:Stream篇(七)
- C#程序分析
- (转)C# 温故而知新:Stream篇(六)