使用简单委托
本文关键字:简单 | 更新日期: 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的成员。你可以在这里找到完整的代码