本文共 2701 字,大约阅读时间需要 9 分钟。
问 题 一 、 写 一 个 函 数 , 参 数 是 一 个 L i s t \color{Red}问题一、写一个函数,参数是一个List 问题一、写一个函数,参数是一个List
返 回 其 中 大 于 10 的 元 素 并 装 成 一 个 L i s t 返 回 返回其中大于10的元素并装成一个List返回 返回其中大于10的元素并装成一个List返回
这 个 简 单 呀 这个简单呀 这个简单呀
static List Maxx(List nums){ List a = new List (); foreach (int num in nums) if (num > 10) a.Add(num); return a;}
问 题 二 、 写 一 个 函 数 , 参 数 是 L i s t \color{Red}问题二、写一个函数,参数是List 问题二、写一个函数,参数是List
返 回 其 中 是 偶 数 的 数 , 组 成 一 个 L i s t 返 回 返回其中是偶数的数,组成一个List返回 返回其中是偶数的数,组成一个List返回
static List Maxx(List nums){ List a = new List (); foreach (int num in nums) if (num % 2 ==0 ) a.Add(num); return a;}
然后发现这两个函数很相似,就是这个逻辑不同而已
if (num > 10) a.Add(num); if (num % 2 ==0 ) a.Add(num);
那我们利用委托,就可以把这些多个相似的函数封装成一个
Ⅰ . 声 明 委 托 \color{Red}Ⅰ.声明委托 Ⅰ.声明委托
delegate bool most_function(int num);
其中delegate
是委托的关键字
bool
是委托要返回的类型(这里用于if的逻辑,所以是bool)
most_function
是委托函数的名字,随便取吧
Ⅱ . 编 写 委 托 函 数 \color{Red}Ⅱ.编写委托函数 Ⅱ.编写委托函数
下 面 分 别 用 实 现 了 大 于 10 和 返 回 偶 数 的 功 能 下面分别用实现了大于10和返回偶数的功能 下面分别用实现了大于10和返回偶数的功能
static most_function GreaterThan10 = delegate (int n) { return n > 10; };static most_function is_even = delegate (int n) { return n%2==0 ; };
most_function
可以看成数据类型
GreaterThan10
可以看成变量名
后面的表达式就照着most_functoin
的定义去自己写
三 、 在 函 数 中 传 入 编 写 的 委 托 函 数 \color{Red}三、在函数中传入编写的委托函数 三、在函数中传入编写的委托函数
这 一 步 比 较 简 单 , 直 接 看 完 整 代 码 吧 这一步比较简单,直接看完整代码吧 这一步比较简单,直接看完整代码吧
class Program{ delegate bool most_function(int num); static most_function GreaterThan10 = delegate (int n) { return n > 10; }; static most_function is_even = delegate (int n) { return n%2==0 ; }; static List Maxx(List nums,most_function S) { List a = new List (); foreach (int num in nums) if ( S(num) ) a.Add(num); return a; } static void Main(string[] args) { List a = new List () { 1, 2, 3, 999, -1, 4,11 }; a = Maxx(a,is_even); foreach (int num in a) Console.WriteLine(num); }}
我的理解就是委托的功能之一就是
能 封 装 函 数 , 并 作 为 参 数 传 进 函 数 中 去 能封装函数,并作为参数传进函数中去 能封装函数,并作为参数传进函数中去
再 看 一 下 我 们 写 的 委 托 函 数 以 及 调 用 代 码 再看一下我们写的委托函数以及调用代码 再看一下我们写的委托函数以及调用代码
static most_function is_even = delegate (int n) { return n%2==0 ; };List a = new List () { 1, 2, 3, 999, -1, 4,11 };a = Maxx(a,is_even);
实 际 上 使 用 l a m b d a 表 达 式 更 简 洁 实际上使用lambda表达式更简洁 实际上使用lambda表达式更简洁
List a = new List () { 1, 2, 3, 999, -1, 4,11 }; a = Maxx(a, (n) => { return n % 2 == 0; });
()
内是委托函数的参数
{}
内是函数的语句
其实还是在构造这个委托函数,不过简化了一些
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107291795 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!