委托(1)
2016-08-10 16:25
211 查看
委托本质上是一种类型跟int、float、string一样,int、float、string可以作为参数传递,声明了委托之后方法也可以像int、float、string一样作为参数传递。
委托一般以EventHandler结尾。
运行结果如下:
运行结果如下:
运行结果如下:
委托一般以EventHandler结尾。
委托的简单使用
public delegate string SayHiEventHandler(string name); public class DelegateHelper { public void SimpleDelegate() { //完整形式 SayHiEventHandler sayHi = new SayHiEventHandler(SayHiByChinese); //隐式调用委托 string result = sayHi("蝈蝈"); Console.WriteLine("result=" + result); sayHi = new SayHiEventHandler(SayHiByEnglish); //显示调用委托sayHi.Invoke("guoguo");等价于sayHi("guoguo"); result = sayHi.Invoke("guoguo"); Console.WriteLine("result=" + result); //简写形式 SayHiEventHandler sayHiSimple = SayHiByChinese; result = sayHiSimple("蝈蝈"); Console.WriteLine("result=" + result); sayHiSimple = SayHiByEnglish; result = sayHiSimple.Invoke("guoguo"); Console.WriteLine("result=" + result); } public string SayHiByEnglish(string name) { Console.WriteLine("Hello:" + name); return "success"; } public string SayHiByChinese(string name) { Console.WriteLine("你好:" + name); return "成功"; } }
运行结果如下:
委托链
委托只能操作与之定义的返回值类型、参数类型、个数都一样的方法。public delegate string SayHiEventHandler(string name); public class DelegateHelper { public void DelegateLink() { SayHiEventHandler sayHi = SayHiByChinese; sayHi += SayHiByEnglish; //此时调用委托链sayHi("蝈蝈")相当于连续执行SayHiByChinese("蝈蝈");SayHiByEnglish("蝈蝈"); string result = sayHi("蝈蝈"); //result是最后一个方法SayHiByEnglish方法的返回值 Console.WriteLine("result=" + result); Console.WriteLine("---------------"); //委托链能加也能减 sayHi -= SayHiByEnglish; result = sayHi("蝈蝈"); //result是SayHiByChinese方法的返回值 Console.WriteLine("result=" + result); Console.WriteLine("---------------"); } }
运行结果如下:
传递委托类型参数
当方法需要委托类型的参数时,传递过去的方法的返回值类型、参数个数、类型必须与委托完全一致。//Program.cs文件代码 class Program { static void Main(string[] args) { new DelegateHelper().SayHi("蝈蝈",new DelegateHelper().SayHiByChinese); new DelegateHelper().SayHi("guoguo", new DelegateHelper().SayHiByEnglish); Console.ReadKey(); } } //DelegateHelper.cs文件代码 public delegate string SayHiEventHandler(string name); public class DelegateHelper { public void SayHi(string name,SayHiEventHandler sayHi) { sayHi(name); } }
运行结果如下:
相关文章推荐
- 我对委托与事件的理解
- 委托和事件(C#)
- 用 C++ 实现 C# 中的 委托/事件 (2-delegate event functor)
- 委托模式
- 委托机制的具体含义
- 我对委托的理解(VB.NET)
- objective-c之委托协议详细讲解
- 多播委托和匿名方法再加上Lambda表达式
- 如何在Vb.NET中使用带返回的函数作为委托?
- 谈.Net委托与线程——创建无阻塞的异步调用(二)
- C#: 异步委托
- 事件与委托
- C# 中的委托和事件 .
- C#委托的介绍(delegate、Action、Func、predicate)
- 深入理解C#编程中的组件-事件-委托
- 成员函数指针与高性能的C++委托(上篇)
- ios编程思想:委托实现方式2 - 协议类方式
- 成员函数指针与高性能的C++委托(中篇)
- ios委托与协议
- jQuery-1.9.1源码分析系列(十) 事件系统——事件委托