使用简单委托

本文关键字:简单 | 更新日期: 2023-09-27 17:48:56

一个简单的委托只是指向一个函数,然后当我们调用委托时,映射函数被调用。

我几乎不使用委托。我想知道为什么要用简单委托。这里我给出了一个使用委托的示例代码。

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函数,而不需要委托。

谢谢

使用简单委托

基本示例:

当使用Sort()时,您可以将委托传递给比较函数。
在这种情况下,你想排序一个集合,但还不知道它将如何排序(当然有一个默认值),但你希望能够使用一个函数,将决定在未来的日期。

所以使用委托传递函数作为参数是很有用的。

列表。排序方法(比较)

我建议您熟悉一等函数和闭包。然后,c#中如何使用事件

还可以通过将其添加到main方法中来访问程序参数。

public static void Main(string[] args)
{
    DisplayMessage messageTarget;
    if (args.Length > 1)
        messageTarget = ShowWindowsMessage;
    // ...

在这个非常简单的例子中,显然不需要委托,因为您已经意识到

MSDN包含了很多关于。net框架的信息。在那里快速搜索一下,通常可以找到大多数。net问题的答案。

我一直在找你,却发现了这个…

http://msdn.microsoft.com/en-us/library/ms173171%28v=VS.100%29.aspx

例如,我有一个代码:

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的情况下,它不会抛出异常,它只是返回null,这有助于跳过null检查,我可以在任何地方做两行代码,但是当你在很多需要这个的项目上工作时,最好有一个简单的函数来做它,你可以通过x.With(q=>q.Z)调用它来获得没有null检查的x.q.Z,因为你可以看到q=>q.Z是一个简单的委托,使用非常好。事实上,它是Func<TInput, TResult> evaluator作为我的checker函数的输入。

Edit:这是一个扩展类,具有一个扩展方法,用于计算object的成员。你可以在这里找到完整的代码