我是 C# 的新手。我能够理解代表的概念,例如语法,如何使用代表。但我仍然对“我们为什么使用代表”感到困惑。因为它最终用来调用一个方法。我们为什么选择代表?
7 回答
我们使用委托能够在稍后执行代码时调用方法。我们可以将一个方法传递给另一个代码块,该代码块可以决定是否以及何时调用它。
通过这种方式,我们可以委派调用方法的责任。
您可以将委托视为在某些执行链中使用预定义合约“注入”您的代码的一种方式。
您可以想象一个简单的示例:在您的导出结果应用程序中,您有以下选项 1. 导出为 pdf 2. 导出 tp csv 3. 导出为 txt
所有 3 个选项都有不同的方法实现,这些方法将对您的数据做一些事情。
假设上面三个分别调用下面三个方法: 1. ExportToPdf(Data, filepath.pdf) 2. ExportToCsv(Data, filepath.csv) 3. ExportToTxt(Data, filepath.txt)
如您所见,所有 3 个都具有相同的方法签名。将来,您可能还有其他类型的出口,但您现在还不知道。您将在此处使用具有相同方法签名的委托来代替任何特定方法。
除此之外,Delegate 还有其他用途,如 EventHandler、使用 BeginInvoke 的异步方法调用。
代表用于许多事情。最常见的用于事件处理程序的 if。生成事件的代码不需要对将处理事件的代码一无所知,这可以由第 3 方提供。换句话说,Microsoft 可以提供事件触发代码,让您提供处理这些事件的方法。
委托可以在任何情况下使用,在这种情况下,您提供某种通用处理程序,而其他代码对其进行特定处理。
查看委托的另一种方式是它们是 C# 处理命令模式的方式。C# 无需声明通常与该模式关联的接口和类来调用方法,而是让您直接传递对方法的引用,从而大大简化了 C# 中实现该模式的方式。
使用委托允许程序员在委托对象内封装对方法的引用。然后可以将委托对象传递给可以调用引用方法的代码,而不必在编译时知道将调用哪个方法。
它主要用于事件处理程序,但这不是它的唯一用途;查看代表的详细信息 - http://msdn.microsoft.com/en-us/library/aa288459%28v=vs.71%29.aspx
委托可以被发送到另一个函数,本质上使函数的一部分“可定制”。
//both of these calls use the same function (Where) but with a different predicate delegate
var greaterThanZero = intList.Where(e => e > 0);
var lessThanZero = intList.Where(e => e < 0);