除了調用具有很多參數的方法(並且可能支持.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. 自定義代表
- 6. 是否有任何理由來代理一個單身bean?
- 7. 是否有可能爲resharper定義自定義命名約定?
- 8. 如何檢查自定義列表是否具有特定行
- 9. MVC ASP.NET路由是有自定義URL
- 10. 自定義P3P代理
- 11. NSWindow的自定義代理
- 12. 硒與自定義代理
- 13. GAE自定義域代理
- 14. 自定義反向代理
- 15. 自定義代理alwayse無
- 16. 是否有任何語言來指定自動代碼修改?
- 17. 是否有任何破解用自定義類覆蓋類名?
- 18. 是否有任何顯示兩週的自定義日曆
- 19. 是否有任何自定義的GWT皮膚/主題可用?
- 20. 是否有任何選項可以自定義stroke_bounds? (Rails Prawn)
- 21. 自定義SSLSocketFactory不使用自定義信任管理器
- 22. 是否有任何openource npm包來部署自定義STUN/TURN服務器?
- 23. 自定義首選活動是否需要定義列表
- 24. 自定義路由
- 25. 速度:是否有任何方法來檢查是否定義變量
- 26. 自定義對象由MapRoutes定義
- 27. 定義自定義表AuthComponent
- 28. 自定義列表定義
- 29. Laravel使用路由來定義自定義宏
- 30. 自定義代表null
當然,公共標識符應該有很好的描述性名稱。 – 2013-05-12 10:34:03