一个简单的委托只是指向一个函数,稍后当我们调用委托时,则调用映射函数。
我几乎不使用delegate.so我只想知道为什么要使用简单的委托。这里我给出了一个使用委托代码示例。
using System;
using System.Windows.Forms;
delegate void DisplayMessage(string message);
public class TestCustomDelegate
{
public static void Main()
{
DisplayMessage messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget = ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget("Hello, World!");
}
private static void ShowWindowsMessage(string message)
{
MessageBox.Show(message);
}
}
在上面的示例中,委托只指向一个函数,当我们调用委托时,会调用一个映射的函数。在这里我们可以直接调用函数然后为什么要使用委托。请用描述代表优势的好样本进行解释。在我上面的程序中,我们可以直接调用ShowWindowsMessage函数,并且不需要委托。
感谢
答案 0 :(得分:3)
基本示例:
使用Sort()时,您可以将委托传递给比较功能 在这种情况下,您想要对一个集合进行排序,但还不知道它将如何排序(当然有一个默认值),但您希望能够使用将在未来日期决定的函数。
因此,使用委托将函数作为参数传递将非常有用。
答案 1 :(得分:1)
我建议您熟悉first-class functions和closures。之后,如何在C#中使用events
此外,您可以通过将程序参数添加到main方法来访问它们。
public static void Main(string[] args)
{
DisplayMessage messageTarget;
if (args.Length > 1)
messageTarget = ShowWindowsMessage;
// ...
答案 2 :(得分:1)
例如,我有一个这样的代码:
public static class MemberEvaluator
{
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class
where TInput : class
{
if (o == null) return null;
return evaluator(o);
}
}
在TInput o
为空的情况下,它不会抛出异常,它只返回null,这有助于跳过空检查,我可以在每个地方执行两行代码,但是当你工作时有很多需要的项目,最好有一个简单的函数来执行它,你可以通过x.With(q=>q.Z)
调用它来获取x.q.Z
而不进行空检查,你可以看到q=>q.Z
是一个非常好用的简单代表。实际上它是Func<TInput, TResult> evaluator
作为我的检查函数的输入。
编辑:这是一个带有一个扩展方法的扩展类,用于评估对象的成员。你可以找到完整的代码here。
答案 3 :(得分:1)
在你非常简单的例子中,显然不需要代表,因为你已经意识到了
MSDN包含许多有关.NET框架的信息。在那里快速搜索可以经常找到大多数.net问题的答案。
我找了你,发现了这个......
http://msdn.microsoft.com/en-us/library/ms173171%28v=VS.100%29.aspx