我有有多個標籤的TabControl一個WinForms形式。我通過向每個標籤頁添加用戶控件來實現標籤頁的功能。這使我能夠將功能分爲每個頁面的類,而不是面對巨大Form類的問題。強制派生類實現一個給定的方法
此外,我已經定義了一個標籤頁基類來應用參數提供通用功能和引用。因此,繼承是UserControl - > PagesBase - > MyPage1(MyPage2等)。提供的PagesBase不是抽象的,這一切運作良好。我可以在VS2012中正常設計單個頁面。
不過,我想強制每個頁面來實現的方法和屬性小(通用)集。首先想到的是使用抽象的PagesBase類。不幸的是,VS中的單個頁面設計者不會啓動,抱怨他們需要創建PagesBase的一個實例。
下一個念頭,就是一個接口適用於PagesBase。但是這不起作用,因爲它會強制PagesBase定義所有常用方法等,並且它們隨後可用於派生的MyPageN類,而不必定義它們自己的方法。接口不會讓它們在基類中被定義爲私有的。如果頁面調用的基類方法沒有被覆蓋(沒有編譯時警告),那麼期望任何人都可以添加一個頁面直接從一個通用接口派生(但不能強制執行此操作)或引發運行時異常)。
我錯過了一些明顯的東西嗎?有什麼想法嗎?
您是否嘗試過純虛擬方法? –
您可以在PagesBase中將您的方法聲明爲virtual,並且在chile pages類中未覆蓋方法的情況下,會在內部拋出異常以獲取運行時異常。 –
@ThomasMatthews:是的,他有:當他說「使用抽象的PagesBase類」時,他就是這麼做的。問題在於Visual Studio GUI設計者想要創建一個「PagesBase」對象,而不能。 –