有人知道框架中已经内置了代表列表吗?

时间:2020-03-05 18:54:18  来源:igfitidea点击:

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

为了清楚起见,我正在寻找这样的东西:

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

等等

如果不是这样,听起来对博客文章来说是个好主意。

解决方案

回答

我以前在这里按照这些思路写过博客。基本上,我描述了如何使用Reflector找到现有的委托来满足需求。

回答

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

我们在这里有直接链接:代表名单

那应该让我们开始。

回答

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

这些代理是.net 3.5中的新增功能。

回答

要记住的一件事是,我们编写的代码对于将来的编码人员(包括我们将来的自我)是可读的。即使我们可以在框架中找到带有正确签名的内置委托,但如果该委托模糊了代码的用途,那么使用该委托也不总是正确的。

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

回答

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

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