在C#類中可以有可以有多個實現的接口。你怎麼做到這一點?是否有任何Smalltalk類接口的實現?
回答
首先你通常不需要接口,因爲如果一個對象實現了與另一個對象相同的消息,它可以替換它。在Java和C#中,除非它們處於相同的層次結構中,否則無法執行此操作,因此您需要接口。
- 在(全部)Smalltalk中有一些協議(方法類別),用於將方法非正式地分組在一起。
- 在Pharo Smalltalk有特質。起初他們看起來像接口,但他們也能夠提供一個實現。
雖然接口在Smalltalk中並不是技術上必需的,但在編寫更大的軟件時它們會有很大的幫助,因爲它們定義了一個類保證遵守的正式合同。 AFAIK,並不是所有的Smalltalk方言都支持協議。我不認爲Visual Smalltalk可以。 – fzwo 2013-06-22 21:24:08
'非正式'在這裏的意思是'在運行前沒有類型檢查' - 對嗎? – 2013-08-09 20:43:02
經過今天與我的一位同事的討論後,我覺得答案是任何類都可以被認爲是一個接口,因爲任何類都可以通過消息傳遞給任何其他類。
smalltalk中的任何數量的類都可以響應相同的消息,因此您不需要按照C#和java的接口。
正如盧卡斯所說,大多數時候,你不需要它們。主要是因爲要實現多態,唯一需要的是實現相同的消息。沒有必要爲它們定義一個通用類型。
另一方面,從我的角度來看,您確實需要接口。大多數情況下,當你有合同展示,或者有一種抽象超類時。這在開發框架時非常普遍。以記錄器或序列化器爲例。在這種情況下,您可能想要定義串行器應該實現的強制方法。然後,你可以創建一個抽象的超類,所有的方法來實現這種方式:
LoggerIterface >> log: anObject
self shouldBeImplemented
LoggerIterface >> reset
self shouldBeImplemented
等等......所以,檢查這個類,你現在哪些方法你必須實現以這個目的的作品的用戶好。 注意#shouldBeImplemented
在Object
實現像這樣的東西(在菲羅Smalltalk中):
Object >> shouldBeImplemented
"Announce that this message should be implemented"
self error: 'This message should be implemented'
但正如你所看到的,它只是一個慣例,它不是由語言本身罰款。
乾杯
馬里亞諾
[SmallInterfaces](http://map.squeak.org/package/b0e66fa3-5a41-4720-886a-bc30aa8518a6) – igouy 2011-03-05 15:16:51
即使不叫「接口」,海豚的Smalltalk(http://www.object-arts.com/)提供了一個名爲「協議」,這是第一類對象的特徵。
每個協議定義了一組選擇器(方法名)的,並且可以測試一個類是否符合或不某個協議:
conformsToProtocol: protocol
"Answer whether the receiver conforms to the named <MethodProtocol>."
你最終具有正式/定義的一組方法名的,並且您可以檢查某個對象是否可以在協議的上下文中使用。 此外,類瀏覽器將顯示所選類符合的協議列表。
有一個協議瀏覽器,所以你可以探索每個協議,並查看系統範圍內哪些類符合它們。
總結:接口在Smalltalk中不是必需的,至少不會實現多態。然而,某些Smalltalk方言爲協議提供了不同程度的支持,協議是接口的模擬,但是對於動態語言。
- 1. 實現接口的類和接口之間是否有任何關係?
- 2. 是否有即使父類實現相同的接口實現子類中的接口任何好處
- 3. 檢查類是否實現接口
- 4. TypeScript - 檢查類是否實現接口
- 5. 在.NET類中實現COM接口時是否有任何「疑難雜症」?
- 6. 是否有可能獲得實現接口的所有類?
- 7. 接口是否被認爲是實現它的類的父類?
- 8. 如何判斷一個類是否是java接口的實現
- 9. Scala是否有類似於C#的顯式接口實現?
- 10. 擴展已經實現接口的抽象類的類是否需要接口?
- 11. 如何確定類型是否實現Powershell中的接口
- 12. 通過實現一個接口,類是否成爲該接口的「類型」?
- 13. 是否有任何MVVM庫實現CommandSinkBinding?
- 14. C中是否有任何NFS實現?
- 15. 如果接口是由類實現的,接口是否會創建對象?
- 16. 如何檢查是否一個類實現一個接口
- 17. C#如何檢查一個類是否實現泛型接口?
- 18. 如何確定是否類實現標記接口
- 19. java中是否有任何類似LINQ的實現?
- 20. 是否有任何實現QueryInterface的泛型類型?
- 21. PHP檢查是否實際類實現接口
- 22. 是否有任何有關smalltalk語言的文檔?
- 23. 繼承類是否自動從其基類實現接口?
- 24. 子類是否導致類停止實現接口?
- 25. 類設計:類實現接口實現另一個接口
- 26. 查找類實現的所有接口
- 27. 調用實現接口的所有類
- 28. 測試對象是否實現接口
- 29. 檢查對象是否實現接口
- 30. Oracle.DataAccess.Client.OracleDataReader(ODP.Net)是否實現IDataReader接口?
[將動態接口添加到Smalltalk](http://www.jot.fm/issues/issue_2002_05/article1/index.html)[SmallInterfaces](http://map.squeak.org/package/b0e66fa3-5a41 -4720-886a-bc30aa8518a6) – igouy 2011-03-05 15:17:25