我可以使用接口方法代替委託嗎?怎麼樣?我發現搜索該接口方法比使用委託更快。我將不勝感激一個簡單的代碼片段。代表和接口如何互換使用?
回答
從理論上講,這是可能做到的一切代表們用接口來完成(Java沒有代表,例如)包含一個單一的方法。但是,它使代碼更加冗長,並且沒有多少好處。然後再一次,沒有類可以做所有事情,並且可能做得更快。這並不意味着你應該避免使用類。調用委託方法可能是稍微比調用接口方法慢。你不應該關心微型優化。使用任何符合您特定需求的東西
使用委託,而不是接口的最大優點是,當一個類只能用於任何給定的接口提供一個實現,它可以爲任意數量的不同的方法創建委託。例如,假設Button不暴露Click事件,Button暴露了一個類型爲IButtonClickHandler的ClickRecipient屬性,其中一個方法爲「ButtonClick」。有兩個按鈕應該有不同的處理程序的表單必須定義一個單獨的類來處理它們中的至少一個,因爲表單本身只能有一個ButtonClick實現。相比之下,Button事件接受EventHandler的委託,並且表單可以爲任意數量的EventHandler方法創建委託。請注意,使用泛型和「標記類型」,通過使Button(Of T)具有IButtonClickHandler(Of T)類型的ClickRecipientProperty,可以顯着減輕此問題;一個表單可以有一個Button(Of FooButton)和一個Button(BarButton),併爲它們的接口提供不同的實現。人們還可以有ButtonConverter(中T,U)包裝類,這將實現IButtonClickHandler(中T),並調用IButtonClickHandler(中U).ButtonClick。
接口是好的,如果使用模式將在99%的時間匹配的內容的界面被設計用於(的時間的剩餘1%,可以創建一箇中間包裝類)。
參見Delegates Are Anonymous Interfaces by Mark Seemann
在上述文章馬克塞曼提到的示例
接口方法
public interface IMyInterface
{
int DoIt(string message);
}
public string DoStuff(IMyInterface strategy)
{
return strategy.DoIt("Ploeh").ToString();
}
委派方法
public string DoStuff(Func<string, int> strategy)
{
return strategy("Ploeh").ToString();
}
- 1. ++和:如何在Haskell中互換使用?
- 2. 使用類和接口的代碼
- 3. 如何使用接口和JPA
- 4. WCF和Silverlight:如何不使用接口?
- 5. 使用反射爲一般類型的代表和接口
- 6. 如何連接到Web服務(SSL啓用和代理接口)
- 7. 何時代表和Func/Action不可互換?
- 8. opencv c和C++接口轉換表
- 9. C#接口,多態性和代表
- 10. Objective C接口,代表和協議
- 11. 如何使用java測試代理互聯網連接?
- 12. 如何讓PHP使用代理設置連接到互聯網?
- 13. 如何迭代接口片?
- 14. 如何使用IObjectWithChangeTracker接口?
- 15. 如何使用KeyListener接口?
- 16. C#如何使用接口
- 17. 如何使用ISynchronizeInvoke接口?
- 18. 如何將此鏈接與Rails互換?
- 19. 如何重用連接到網格的交互和交互
- 20. 使用迭代器接口實現鏈接列表
- 21. jQuery互換項目與連接列表
- 22. can ===和!=可互換使用嗎?
- 23. 可以互換使用Tensorflow和Keras嗎?
- 24. 使用STR和字符串互換
- 25. 使用的BinaryFormatter和XmlSerializer的互換
- 26. 可互換地使用std :: string和QString
- 27. slsvcutil.exe代理和接口
- 28. C-接口交互的bash
- 29. 使用抽象和接口
- 30. 如何互換指數鏈表C++
你在說什麼? 接口與委託的語義有很大的不同,所以您是否使用A或B,視情況而定。 – 2010-01-06 10:04:29
@Frederik:在這裏不歡迎評論與磨蝕程度。對於那些有各種技術知識和能力的人來說,SO是一個更專業的地方。 @薩米爾:我同意米奇你問了25個問題,接受他們中的一些。 – AnthonyWJones 2010-01-06 10:07:45
給問題添加一些上下文會很好。你試圖優化的具體問題是什麼?或者這是一個普遍的問題? – Gishu 2010-01-06 10:14:18