我有一個接口,其中包含假設10-方法,它是繼承到類說class1.My的要求是我不想繼承2方法到class1 .so如何在c#中可能.net如何不在界面中繼承某些功能?
-1
A
回答
6
你可能分裂的接口2,和你的類實現只有一個:
public interface Ifc1 {
void Method1();
}
public interface Ifc2 {
void Method2();
}
class Cls1 : Ifc1 {
// now you need to implement Method1 only
}
或者,你可以拋出一個NotImplementedException
在Method2
:
class Cls1 : Ifc1 {
public void Method2() {
throw new NotImplementedException();
}
}
我會去的冷杉t選項,如果可能的話。
如果拋出異常,您只會發現在調用該方法時不支持該方法。你將不得不趕上這個例外,你寫的代碼將不得不處理這個問題,並且不會那麼幹淨。
如果你拆分接口,相反,你的類將只是沒有你不想實現的方法。
+0
界面應該分開。不要拋出異常,您實現接口的事實表明您支持接口定義的所有行爲。 –
0
創建混搭系統。
你的課應該實現整個接口,因爲在你的問題的上下文中確實沒有其他選擇。其他答案可以爲您提供有關更改接口設計人員設置的不正確語義的指導。
你的類實現了接口,但是你的類本身依賴於將來實現該工作的實現者。
你的類應該派生自一個包含抽象函數的類。這些抽象函數將在您的類的接口實現中被「調用」。但是,由於你的類包含未解決的抽象內容,因此它不會直接實例化,所以不會直接實例化。另一個類繼承自你的類,並具體實現抽象函數或在近期的替代和可能的場景中實現抽象函數,拋出不支持的異常。
通過這種方式,您可以在不違反任何原則的情況下實現自己的能力,但將基本衝突傳遞給待定班級。通過這種方式,你可以向前邁進一步,但是避免了衝突。未來的執行者可以依靠你的前進步驟作爲一個正確的基礎行動,但必須解決並逆轉你的橫向運動,做一個比喻。
相關問題
- 1. 部分繼承 - 繼承某些功能,減去有問題的方法
- 2. 如何繼承JavaScript功能?
- 3. 繼承功能?
- 4. 繼承界面還是Impliment界面?
- 5. Specflow功能中的繼承
- 6. 繼承功能inaccessable在C++
- 7. 如何界定休眠繼承類型,如果你不能去
- 8. 在javascript中增加繼承的功能
- 9. 確保目標繼承自定義屬性的某個界面
- 10. 繼承問題,從繼承類的某些數據獲得NULL
- 11. 如何繼承指令中的某些屬性
- 12. 如何在某些承諾失敗時繼續使用$ q.all()
- 13. 功能NHibernate HasManyToMany繼承
- 14. Ag-grid繼承功能
- 15. C++繼承 - 曖昧功能
- 16. 多重繼承ambigious功能
- 17. 繼承numpy.vectorize-ED功能
- 18. 功能和類繼承
- 19. AS3 OOP繼承和功能
- 20. 繼承與功能NHibernate
- 21. 朋友和繼承功能
- 22. 打字稿功能繼承
- 23. c + +延伸繼承功能
- 24. C++ 11只允許繼承某些類
- 25. 對象不繼承原型的功能
- 26. 我不明白這種繼承功能
- 27. AngularJS如何在某些功能完成後執行功能?
- 28. 在Java界面中,我如何不*使用從父界面繼承的特定方法?
- 29. 邊界框在某些方面碰撞
- 30. 如何用jQuery提供某些功能?
這不是,至少不是你所期待的。如果一個類實現了一個接口,它必須實現*整個接口。 (這就是使它成爲接口的原因......它是由該類提供的功能契約。)如果要挑選並選擇要實現的部分,則需要多個較小的接口。嘗試將接口應用於實際上未被該接口描述的類是違反了Liskov替換原則。 – David
你可以讓你的class1抽象或繼承,但是會拋出NotSupportedException。 – Diryboy
@Diryboy:仍然是對Liskov替換的違反。這些對象應該準確地描述它們所暴露的功能。接口和抽象類不僅僅是爲了可能需要或不需要的功能傾倒基礎。 – David