C#语法小知识(十三)带返回值的委托
2016-10-17 11:41
453 查看
委托的相关基础知识请参考C#语法小知识(四)委托delegate,这里讨论一下带返回值的委托如何处理。
声明一个带返回值的委托:public delegate string TestDel(string str);
使用:
TestDel t; t = (string str) => str; t += (string str) => str + "1"; t += (string str) => str + "2"; t += (string str) => str + "3"; Console.WriteLine(t ("hhhh"));
(这里添加监听使用了表达式Lambda,参考C#语法小知识(十二)匿名方法与Lambda表达式)
这里会打印hhhh3,也就是最后一个监听的返回值。
如果要打印所有的结果该怎么写?
我们注意到System.MultiCastDelegate里有一个方法:GetInvocationList
foreach (TestDel td in t.GetInvocationList()) { Console.WriteLine(td.Invoke ("iiii")); }
这样所有的返回值都被打印出来了。
使用这个方法我们可以做很多事情。
例如,我们可以为一个UI组件添加一个是否可以隐藏的delegate,如果有任何一个监听方返回false,那么这个UI组件便不能隐藏。
public delegate bool CanClose();
CanClose canCloseDelegate = null; canCloseDelegate += () => true; canCloseDelegate += () => false; bool canClose = true; foreach (CanClose del in canCloseDelegate.GetInvocationList()) { if (!del ()) { canClose = false; break; } } if (canClose) { //TODO: Hide the ui }
或者可以为一个对象添加多个数据源。
public delegate string DataSource();
DataSource dsDelegate = null; dsDelegate += () => "Apple"; dsDelegate += () => "Pen"; dsDelegate += () => "Pineapple"; List<string> data = new List<string>(); foreach (DataSource ds in dsDelegate.GetInvocationList()) { data.Add (ds ()); } Console.WriteLine (data.Count);
相关文章推荐
- SQL Server 第三堂课,学习数据库函数。跟C#语言异曲同工,同样是由输入参数,输出参数,函数体,返回值四要素组成,不同的是语法和写法。掌握知识的关键在与学好C#语言的函数
- C#语法小知识(四)委托delegate
- C#基础部分之语法和基础知识
- C#语法造成的小问题(编译原理知识)
- C# 委托知识总结
- 一起谈.NET技术,C# 委托知识总结
- C# 委托知识总结
- C#基础部分之语法和基础知识
- C#基础知识--委托,匿名方法,Lambda
- C#基础系列问题三委托知识总结1
- .Net (C#)委托和事件(获取多个返回值)
- C# 委托知识总结
- C#事件和委托的基础知识模型
- C#基本语法知识
- c#委托的知识,转载学习。
- C#基础系列问题三委托知识总结2
- C#语法知识
- C#事件和委托的基础知识模型收藏
- C#基础部分之语法和基础知识