2013-11-04 42 views
0

我是c#中的新手。我能够理解代表的概念,如语法,如何使用代表。但我仍然困惑于“为什么我们使用代表”。因为它最终用来调用一个方法。我们为什么选择代表?代表的核心使用

+0

http://stackoverflow.com/questions/687626/the-purpose-of-delegates?rq=1 –

+0

http://stackoverflow.com/questions/9544802/what-are-delegates-for?rq=1 –

+0

http://stackoverflow.com/questions/639320/what-are-the-advantages-of-delegates –

回答

1

我们使用代表能够在稍后执行代码时调用方法。我们可以将一个方法传递给另一个可以决定是否以及何时调用它的代码块。

这样我们可以委托调用方法的责任。

0

代表用于很多事情。对于事件处理程序最常见的用途。生成该事件的代码不需要知道将处理事件的代码,该代码可以由第三方提供。换句话说,微软可以提供事件触发代码,让你提供处理这些事件的方法。

代表可以在任何情况下使用,如提供某种通用处理程序和其他代码执行某些特定的处理。

查看委托的另一种方式是它们是C#处理Command Pattern的方式。为了调用方法,不必声明通常与该方法相关的接口和类,C#可让您直接传递对方法的引用,从而大大简化了在C#中实现该模式的方式。

0

使用委托允许程序员封装对委托对象内的方法的引用。然后可以将委托对象传递给可以调用引用方法的代码,而无需在编译时知道哪个方法将被调用。

它主要用于事件处理程序,但这不是它的唯一用法;查看代表的详细信息 - http://msdn.microsoft.com/en-us/library/aa288459%28v=vs.71%29.aspx

1

您可能会认为委托是在某些执行链中将代码“注入”预定义合同的一种方式。

0

代表可以发送到另一个函数,实质上是“可定制”功能的一部分。

//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); 
0

你能想象一个简单的例子:在应用程序中导出结果您有以下选项 1.导出为PDF 2.出口TP CSV 3.出口到TXT

所有3选项会有不同的方法实现,这些方法将与您的数据做SOMETHING

上述三个假设将调用下面分别3种方法: 1. ExportToPdf(数据,filepath.pdf) 2. ExportToCsv(数据,filepath.csv) 3. ExportToTxt(数据,文件路径。txt)

正如你所看到的,所有3个都有相同的方法签名。在将来,您可能还有其他类型的出口,您现在还不知道。您将在此处使用具有相同方法签名的委托,以代替任何特定方法。

除此之外,还有Delegate的其他用途,如EventHandler,使用BeginInvoke的异步方法调用。