A12_获取与清空委托列表|匿名委托|Lambda表达式
来源:互联网 发布:怎么在淘宝当客服 编辑:程序博客网 时间:2024/06/05 21:06
/* * 委托的取值与清空委托列表 * * **/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace A12_GetAndCleanDelegateList{ class Demo9 { private Action actHandler; public Demo9() { actHandler += DelegateMethod1; actHandler += DelegateMethod2; actHandler += DelegateMethod3; } public void DelegateMethod1() { Console.WriteLine("Method DelegateMethod1"); } public void DelegateMethod2() { Console.WriteLine("Method DelegateMethod2"); } public void DelegateMethod3() { Console.WriteLine("Method DelegateMethod3"); } //取得委托列表 public void Test1() { Delegate[] delArray = actHandler.GetInvocationList(); foreach (Delegate item in delArray) { item.DynamicInvoke(); } } //清空委托列表 public void Test2() { while (actHandler!=null) { actHandler -= this.actHandler; } if (actHandler != null) { actHandler.Invoke(); } else { Console.WriteLine("委托列表已经清空"); } } //清空委托列表通用算法 public void Test3() { Delegate[] delArray = actHandler.GetInvocationList(); for (int i = 0; i < delArray.Length; i++) { actHandler -= delArray[i] as Action; } if (actHandler != null) { actHandler.Invoke(); } else { Console.WriteLine("Demo9:Test3() 委托列表已经清空"); } } static void Main1(string[] args) { Demo9 obj = new Demo9(); obj.Test1(); //obj.Test2(); obj.Test3(); } }}
/* * 匿名委托 * 如果一个委托不需要在别处调用,那么使用匿名方法可以减少代码量 * **/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace A12_GetAndCleanDelegateList{ class Demo10 { public void Test2() { Func<int, int, int> funAddingMethodHandler = delegate (int num1, int num2) { return num1 + num2; }; int result = funAddingMethodHandler(20, 30); Console.WriteLine(result); } static void Main1(string[] args) { Demo10 obj = new Demo10(); obj.Test2(); } }}
/* * Lambda表达式 * 对于匿名委托的进一步简化 * 1.去掉delegate关键字 * 2.去掉参数列表中的类型定义 * 3.如果方法中只有一条语句,可以去掉return和{}; * 4. * **/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace A12_GetAndCleanDelegateList{ class Demo11 { public void Test1() { //匿名委托 Func<int, int, int> funAddingMethodHandler = delegate (int num1, int num2) { return num1 + num2; }; //Lambda表达式 Func<int, int, int> funAddingMethodHandler2 = (int num1, int num2) => { return num1 + num2; }; Func<int, int, int> funAddingMethodHandler3 = (num1, num2) => { return num1 + num2; }; Func<int, int, int> funAddingMethodHandler4 = (num1, num2) => num1 + num2; //方法中只有一个参数,可以去掉() Func<int, int> funAddingMethodHandler5 = (num1) => num1 + 888; Func<int, int> funAddingMethodHandler6 = num1 => num1 + 888; //如果没有参数 Func<int> funAddingMethodHandler7 = () => 888; Console.WriteLine(funAddingMethodHandler(10, 20)); Console.WriteLine(funAddingMethodHandler2(80, 20)); Console.WriteLine(funAddingMethodHandler3(80, 30)); Console.WriteLine(funAddingMethodHandler4(80, 40)); Console.WriteLine(funAddingMethodHandler5(200)); Console.WriteLine(funAddingMethodHandler6(20)); Console.WriteLine(funAddingMethodHandler7()); } //Lambda表达式使用外部变量 public void Test2() { int num = 100; Func<int, int> funHandler = x => x + num; // 其中num表达式外部变量 Console.WriteLine(funHandler(1000)); } static void Main1(string[] args) { Demo11 obj = new Demo11(); obj.Test1(); obj.Test2(); } }}
阅读全文
0 0
- A12_获取与清空委托列表|匿名委托|Lambda表达式
- 匿名委托与Lambda表达式
- 匿名委托Lambda表达式
- 委托、匿名委托和lambda表达式
- 委托 匿名函数 ,Lambda表达式
- 委托,匿名方法,lambda表达式
- 委托与Lambda表达式
- 委托,事件,回调,匿名函数与Lambda表达式详解
- 匿名函数、委托、lambda表达式、扩展方法
- c#之委托、匿名方法、Lambda表达式
- 委托和匿名方法、lambda表达式
- 委托、匿名方法、Lambda表达式的演进
- C# 委托 事件 匿名函数 Lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- 委托中的匿名方法和lambda表达式
- Lambda表达式_匿名方法_委托
- 委托、匿名方法、Lambda表达式的演进
- Lambda表达式与委托类型
- 智能物联网构想
- python学习—Day40—多进程
- 笔记:HTML5自己感觉比较难理解的知识
- ACM基础算法复习(STL + DFS + BFS + 并查集 + 快速幂 + 欧几里得算法)
- Java知识点复习系列(3)
- A12_获取与清空委托列表|匿名委托|Lambda表达式
- 【Scikit-Learn 中文文档】Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- Docker入门学习(2)----Docker安装和第一个hello-world
- RMQ(ST算法)
- java反射笔记
- 通过影响函数理解黑箱预测
- HUAT电气系CAD电机正反转接线课设概述
- 【Scikit-Learn 中文文档】预处理数据
- JDBC | 4