3 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
關(guān)鍵是接口代表合同。任何實(shí)現(xiàn)類都必須具有的一組公共方法。從技術(shù)上講,該接口僅控制語法,即,那里有什么方法,它們得到什么參數(shù)以及它們返回什么。通常,它們也封裝語義,盡管只能通過文檔進(jìn)行封裝。
然后,您可以使用接口的不同實(shí)現(xiàn),并隨意替換它們。在您的示例中,由于每個(gè)披薩實(shí)例都是一個(gè),因此IPizza
您可以IPizza
在處理未知披薩類型的實(shí)例的任何地方使用。類型繼承自的任何實(shí)例IPizza
都可以保證可排序,因?yàn)樗哂?code>Order()方法。
Python不是靜態(tài)類型的,因此類型會在運(yùn)行時(shí)保留并查找。因此,您可以嘗試Order()
在任何對象上調(diào)用方法。只要對象具有這樣的方法,運(yùn)行時(shí)就很高興,并且可能只是聳聳肩說“ Meh?!保ㄈ绻麤]有)。在C#中不是這樣。編譯器負(fù)責(zé)進(jìn)行正確的調(diào)用,如果只是隨機(jī)的,object
則編譯器尚不知道運(yùn)行時(shí)實(shí)例是否具有該方法。從編譯器的角度來看,它是無效的,因?yàn)樗鼰o法驗(yàn)證它。(您可以使用反射或dynamic
關(guān)鍵字來執(zhí)行此類操作,但是我猜這有點(diǎn)遠(yuǎn)了。)
還要注意,通常意義上的接口不一定必須是C#interface
,它也可以是抽象類甚至是普通類(如果所有子類都需要共享一些通用代碼,則可以派上用場)但是interface
就足夠了)。
- 3 回答
- 0 關(guān)注
- 512 瀏覽
添加回答
舉報(bào)