6

我发现自己偶尔会为非常简单的函数编写委托(例如不带参数并返回 void),我想知道是否有人知道某个地方已经编译了 .NET 框架中已经可用的所有预定义委托的列表,以便我可以重用它们?

要清楚,我正在寻找这样的东西:

  • 无效 System.AsyncCallback(System.IAsyncResult)
  • int System.Comparison(T x, T y)
  • 无效 System.IO.ErrorEventHandler(对象,System.Io.ErrorEventArgs)

等等

如果没有,听起来像是一篇博客文章的好主意。

4

5 回答 5

7

只需在 msdn 数据库中查找 (T) 委托。

在这里你有一个直接的链接:代表名单

那应该让你开始。

于 2008-09-15T19:44:23.443 回答
3

我以前在这里写过这些内容。基本上,我描述了如何使用 Reflector 找到现有的委托来满足您的需求。

于 2008-09-15T19:43:56.517 回答
2

要记住的一件事是,您编写的代码可供未来的编码人员阅读,包括您未来的自己。即使您可以在框架中找到具有正确签名的内置委托,如果它掩盖了代码的目的,使用该委托并不总是正确的。

六个月后,BondMaturationAction类型的委托的使用将比 Action 类型的委托更清晰,即使签名相同。

于 2008-09-15T20:07:39.127 回答
1

只需将 Action、Action<T>、Action<T1,T2,..> 委托用于不返回任何内容 (void) 的方法,或 Func<TResult>, Func<T, TResult>, Func<T1, ... , TResult> 代表返回 TResult 的方法。

这些代表是 .net 3.5 中的新代表。

于 2008-09-15T20:00:59.347 回答
0

在 .NET 2.0 及更高版本中,如果您根本没有参数,请使用 EventHandler,如果您想提供一些自定义数据,请使用 EventHandler<T>(您需要从 EventArgs 派生一个类,其中包含您的附加数据)。如果您没有要使用的 EventArgs,请传递 EventArgs.Empty。

因为 EventArgs 是一种引用类型,所以 EventHandler<T> 的所有实例都使用相同的 JITted 代码。

于 2008-09-15T22:35:35.217 回答