Csharp/C#教程:代表们是为了什么?分享


代表们是为了什么?

可能重复:
代表们的优势是什么?

我创建了一个示例应用程序。 我真的很难理解为什么要使用委托,因为没有委托我们可以实现一切。

class Program { public delegate double Integrand(double x); static double MyFunc1(double x) { return x + 10; } static double MyFunc2(double x) { return x + 20; } public static double Gauss3DelMethod(Integrand f) { double a = f(1); return a; } public static double Gauss3SimpleMethod(double x) { double a = x; return a; } static void Main(string[] args) { //with delegates double res = Gauss3DelMethod(MyFunc1); double res1 = Gauss3DelMethod(MyFunc2); //without delegates double res2 = Gauss3SimpleMethod(MyFunc1(1)); double res3 = Gauss3SimpleMethod(MyFunc2(1)); int i = 0; } } 

那么,我为什么要使用代表呢?

在你的特定例子中,也许它并不重要。 (目前尚不清楚它正在努力实现的目标。)

但是假设你想让方法对几个不同的输入执行相同的MyFunc1MyFunc2 。 例如,假设您正在实现Newton-Raphson方法 ,以对一般函数进行操作。 在这种情况下,您无法调用该函数一次并将其传递给方法 – 您希望将实际函数传递给方法,以便该方法可以使用它需要的任何输入来调用它。

类似的例子是排序。 例如,使用LINQ可以编写如下内容:

 var sorted = people.OrderBy(x => x.Age).ToList(); 

我们正在传递一个函数来将每个源元素投影到排序键。 我们不必自己执行该function – OrderBy将为我们执行(懒惰)。

当然,所有这些都可以通过单方法接口完成 – 委托和单方法接口有很多共同之处。 但是,与单方法接口相比,代理具有以下优点:

当然,所有这些都可以使用单方法接口以不同的方式解决,但代表是一个方便的替代方案。

总之:代表们非常有用。 仅仅因为你写了一些并不特别需要它们的琐碎代码并不意味着它们没用。 我强烈建议您查看LINQ,事件处理程序和TPL,所有这些都会大量使用委托。

代表是传递函数的有用方法。

FuncAction也是代表。 没有它们,你几乎不能使用所有LINQ方法,从C#3.0开始,你可以使用Lambda Expressions更快地创建它们。

想象一下,例如你有一个可枚举的整数:

 var numbers = Enumerable.Range(0, 100); 

通过使用委托,您可以创建更高阶的函数 ( https://en.wikipedia.org/wiki/Higher-order_function ),它可以帮助您以多种方式过滤上述数字。 Where一个案例Where

您可能想要选择奇数:

 var odd = numbers.Where(a => a % 2 == 0); 

甚至是:

 var even = numbers.Where(a => a % 2 != 0); 

如果没有它们,您将不得不为每个filter创建一个方法(例如WhereOddWhereEven

上述就是C#学习教程:代表们是为了什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/962637.html

(0)
上一篇 2021年11月27日
下一篇 2021年11月27日

精彩推荐