除了调用具有很多参数的方法(并且可能支持.NET 3.5前代码),是否有任何理由来定义自定义委托而不是仅使用Func和Action?是否有任何理由来定义自定义代表?
2
A
回答
1
在功能上并不是真的。在可读性方面,我能想象的唯一事情就是更加明确。请看下面的例子:
public delegate void MessageHandler(string msg);
// user custom delegate
public sub DoSomething(MessageHandler handler){}
// use generic action
public sub DoSomething(Action<string> handler){}
您可以在这里看到的第一个版本是更为明确,因为它准确地定义什么是预期的,因此您的客户端代码将更具可读性:
DoSomething(new MessageHandler(somefunc));
DoSomething(msg => ...);
1
在现代的C#代码,你是对的,很少需要创建一个自定义委托。对于C#4,我只会创建一个自定义代理:
- 当有多个参数时,为了提高可读性和自我记录。
- 如果委托人的姓名可以向API的用户传递意思
- 也许对于某些P/Invoke操作,现在不能想到任何权利。
为什么你会看到在.NET代码库中一些定制代表的原因是,大部分是被设计相当早,在C#是版本1,也没有匿名委托,lambda表达式或仿制药。因此,大多数需要委托类型的操作都需要自定义委托。
2
目前尚未提及的一个方面是Func
和Action
不支持ref
和out
参数。不过,代表们可以拥有它们。
相关问题
- 1. 自定义代理
- 2. 自定义路由管理
- 3. 是否有任何可能的方法来制作这个自定义列表?
- 4. 是否有任何预定义的文件来定义jmeter的变量?
- 5. 是否有可能为resharper定义自定义命名约定?
- 6. 自定义代理alwayse无
- 7. GAE自定义域代理
- 8. NSWindow的自定义代理
- 9. 硒与自定义代理
- 10. 是否有任何语言来指定自动代码修改?
- 11. 是否有任何显示两周的自定义日历
- 12. 是否有任何破解用自定义类覆盖类名?
- 13. 是否有任何选项可以自定义stroke_bounds? (Rails Prawn)
- 14. 是否有任何openource npm包来部署自定义STUN/TURN服务器?
- 15. 自定义首选活动是否需要定义列表
- 16. 自定义路由
- 17. 自定义对象由MapRoutes定义
- 18. 自定义列表定义
- 19. 速度:是否有任何方法来检查是否定义变量
- 20. ASP.NET MVC路由:如何定义自定义路由
- 21. 具有ContainerView的UIViewController自定义代表
- 22. 代码中的自定义路由
- 23. 是否可以使用T4MVC和global.asax中定义的自定义路由?
- 24. Django管理添加自定义按键+自定义表单
- 25. Orchard cms自定义表单自定义
- 26. 如何确定Crystal报表中是否存在自定义Ufl?
- 27. 如何根据子女是否有焦点来定制自定义控件?
- 28. 是否有意义定义const scope_refptr()?
- 29. Lua,自定义迭代器 - 正确的方式来定义?
- 30. JAXB 2.1 - 自定义xs:任何绑定
当然,公共标识符应该有很好的描述性名称。 – 2013-05-12 10:34:03