C#五、(委托的用法和为什么需要委托?)
程序员文章站
2023-12-28 09:01:46
...
static List<int> Maxx(List<int> nums)
{
List<int> a = new List<int>();
foreach (int num in nums)
if (num > 10) a.Add(num);
return a;
}
static List<int> Maxx(List<int> nums)
{
List<int> a = new List<int>();
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);
那我们利用委托,就可以把这些多个相似的函数封装成一个
delegate bool most_function(int num);
其中delegate
是委托的关键字
bool
是委托要返回的类型(这里用于if的逻辑,所以是bool)
most_function
是委托函数的名字,随便取吧
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
的定义去自己写
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<int> Maxx(List<int> nums,most_function S)
{
List<int> a = new List<int>();
foreach (int num in nums)
if ( S(num) ) a.Add(num);
return a;
}
static void Main(string[] args)
{
List<int> a = new List<int>() { 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<int> a = new List<int>() { 1, 2, 3, 999, -1, 4,11 };
a = Maxx(a,is_even);
List<int> a = new List<int>() { 1, 2, 3, 999, -1, 4,11 };
a = Maxx(a, (n) => { return n % 2 == 0; });
()
内是委托函数的参数
{}
内是函数的语句
其实还是在构造这个委托函数,不过简化了一些