C# 委托与事件
来源:互联网 发布:linux dd克隆系统 编辑:程序博客网 时间:2024/04/29 11:14
委托
委托建立的是一条方法链条,可以让一个对象依次执行链条上的方法。可以简化代码,提高效率。
声明
public delegate int Delegate(int i);//声明委托
对委托注册方法
匹配规则:
方法额返回类型必须和委托的返回类型相同。
方法的参数必须和委托的方法参数相同,参数名称可以不同。
public void F1(int i,int j);//nopublic int F2(int i);//nopublic int F3(int m,int n);//yes
实例化委托
委托是一个类,所以需要实例化。
namespace Test{delegate int Delegate(int i);class Program{public int F1(int i){return i;}static void Main(string[] args){Program p=new Program();Delegate d1=new Delegate(p.F1);//创建实例}}}
委托的方法列表
将多个方法绑定到同一个委托变量。,当调用委托变量时,可以一次调用所有绑定的方法。
namespace Test{delegate int Delegate(int i);class Program<pre name="code" class="csharp">namespace Test{public delegate int Delegate(int i);public class Program{public static int F1(int i){return i;}public int F2(int j){return j;}static void Main(string[] args){Program p=new Program();Delegate d1=new Delegate(p.F1);Delegate d2=new Delegate(p.F2);Delegate d3=d1+d2;//给委托注册方法int i3=d3(10);}}}
调用委托
委托是一个方法链条,调用委托也就是调用了委托实例包含的所有方法。
namespace Test{public delegate void Delegate(int i);public class Program{public static void F1(int i){Console.WriteLine(i.ToString());}public static void F2(int i){Cosnole.WriteLine(i.ToString());}static void Main(string[[] args){Delegate d1=new Delegate(Program.F1);Delegate d2=new Delegate(Program.F2);Delegate d3=d1+d2;d1(10);//调用d1实例d2(200);//调用d2实例d3(201);//调用d3实例}}}
事件
事件是一种特殊的委托
声明事件的委托
public delegate void EventHandler(object sender,EventArgs e);
声明事件本身
public event EventHandler Print;//申明事件Print
注册事件&移除事件
namespace Test{public delegate void EventHandler(object sender,EventArgs e)class Program{public event EventHandler Print;public void F1(object sender,EventArgs e){Console.WriteLine("F1");}public void F2(object sender,EventArgs e){Console.WriteLine("F2");}static void Main(string[] args){Program p=new Program();p.Print+=new EventHandler(p.F1);//给事件注册一个方法p.Print+=new EventHandler(p.F2);if(p.Print!=null){p.Print(null,null);}Console.Writeline();p.Print-=new EventHandler(p.F1);//从事件中移除方法F1;if(p.Print!=null){p.Print(null,null);}Console.ReadLine();}}}
调用事件
namespace Test{public delegate void EventHandler(object sender,EventArgs e);class Program{public event EventHandler Print;public void F1(object sender,eventargs e){Console.WriteLine("F1");}static void Main(string[] args){Program p=new Program();p.Print+=new EventHandler(p.F1);if(p.Print!=null){p.Print(null,null);//调用事件}Console.ReadLine();}}}
0 0
- c# 委托与事件
- C#委托与事件
- C# 委托与事件
- c#委托与事件
- C# - 委托与事件
- C#委托与事件
- C# 委托与事件
- C#委托与事件
- c#委托与事件
- C#事件与委托
- C# 事件与委托
- C#事件与委托
- c#委托与事件
- C#委托与事件
- c#委托与事件
- C#委托与事件
- C# 委托与事件
- C#委托与事件
- 到底谁在说谎
- 未来属于那些相信他们梦想之美的人
- eXtremeDB快速入门:三
- java作业感悟
- java
- C# 委托与事件
- Hive 表被锁定,无法删除表
- Python标准库:内置函数setattr(object, name, value)
- 绘制圆形图片
- 关于游戏服务器是多线程还是单线程的讨论
- Bitmap,Drawable转换
- MySQL: Forcing close of thread **** user:''
- iOS学习之路-02-创建页面前的思考
- hdu 1166 敌兵布阵(线段树)