1
A
回答
2
說你有兩個接口,IDoStuff<T>
和IDoStuff
,你的類實現。他們都有一個方法「GetStuff」,但有一個簽名T GetStuff()
,另一個有簽名object GetStuff()
。
問題是.net不會讓你有兩個方法命名爲相同的東西,只有返回類型不同。但是你需要在你的類中同時使用這兩種方法來滿足這兩個接口。如果T
實際上是object
,那麼您可以像這樣使用顯式實現。
public T GetStuff()
{
T stuff;
//Stuff Is Got
return stuff;
}
IDoStuff.GetStuff()
{
return (object)GetStuff();
}
注意,由於IDoStuff
任務GetStuff
安全要求,IDoStuff.GetStuff
將基於該接口的聲明是public/private/protected/internal
。
如果你願意,你可以明確地做每一個植入,但每個的完整方法名將是InterfaceName.MethodName
,並且讀取和寫入會有點煩人。通常這隻有在你想多次實現一個具有相同簽名的方法來滿足多個接口時纔會使用。
5
背後隱性和顯性的執行理念很簡單:
- 與隱含執行的成員將通過接口訪問,以及通過類實現它
- 具有明確實施的成員會通過接口只能訪問
至於爲什麼以及何時使用這個或另一個,它取決於。在使用相同屬性/方法實現多個接口的情況下,顯式實現是唯一的選擇,因爲它是知道您打算調用哪個屬性/方法的唯一方法。很明顯,在這種情況下,你不能在類本身擁有該屬性/方法:如果存在,它將只是類,並且不會匹配任何接口(這將有它們的顯式實現)。
在其他情況下,它確實取決於您的設計選擇以及您想要完成的工作。如果您想強制調用者僅通過接口訪問接口成員,而不是通過類聲明,請執行顯式實現。
相關問題
- 1. 接口的隱式和顯式實現
- 2. 將顯式接口實現重構隱式接口實現
- 3. 顯式接口實現和多接口
- 4. 接口實現:隱式與顯式
- 5. 爲什麼顯式的接口實現?
- 6. C#中顯式接口實現的優點是什麼?
- 7. 接口的全名與顯式實現它的屬性之間的區別
- 8. 什麼是顯式接口成員實現,爲什麼
- 9. VB.NET顯式接口實現
- 10. 實現接口的隱式和顯式都有意義嗎?
- 11. 爲什麼「僅實現接口顯式」僅僅有時可用,而不是「實現接口」(即隱含地)?
- 12. List接口和Collection接口的主要區別是什麼?
- 13. C++ cli接口事件顯式實現
- 14. 隱式與顯式接口
- 15. 正常接口和MBean接口之間的區別
- 16. 接口繼承和接口之間的區別
- 17. Delphi和Lazarus(FPC)的接口實現有什麼區別?
- 18. 抽象類和接口之間有什麼區別?
- 19. 模擬類和接口之間有什麼區別?
- 20. Erlang Web網關接口(EWGI)和Webmachine之間有什麼區別?
- 21. R的C接口中的NewEnvironment和R_NewHashedEnvironment之間的區別
- 22. C++中的顯式和隱式賦值有什麼區別
- 23. 隱<>顯式接口
- 24. 抽象的顯式接口實現
- 25. 「約束的顯式接口實現......」
- 26. 命令窗口和立即窗口之間的實際區別是什麼?
- 27. IComparable和IEquatable接口有什麼區別?
- 28. 爲什麼接口的顯式實現不能公開?
- 29. 如何在C++/CLI中顯式/隱式地實現接口成員?
- 30. NVMe排隊接口與PCIe排隊接口之間的區別
http://blogs.msdn.com/b/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx 很好的例子 –