我一直在一次又一次地出現,但我不確定我做事的方式是錯誤的,還是我可以以不同的方式做事。使用Windows窗體作爲抽象類 - 使用哪種模式?
一個例子:
我有了一些私有方法一個DataGridView執行DataGrid的驗證和解釋上的DataGridView鼠標右鍵單擊Windows窗體等,這windows窗體本質上是一種「抽象的」類並且從不直接實例化。然後,我繼承這個基類,並以各種方式(模板模式)對其進行自定義,例如,定義datagridview的列和特定於這些列的特定格式化方法等。
當我使用這些類時,基類public方法形成我的接口,並且可以實例化我想要的特定類型的datagridview並對其進行操作通過通用接口。可愛。
問題:
的主要問題是,你不能真正宣佈Windows窗體類的抽象,而不會導致Visual Studio設計扔不穩定,因爲它無法實例化這些抽象類。
一些解決方案:
在我「落實」在基類中的方法,我想與被覆蓋的那一刻:
throw new NotSupportedException();
所以至少如果我忘了重寫的一個這些方法構成了我的界面。這對我來說似乎很臭,但我並不喜歡它。
我玩弄的另一個解決方案是完全消除繼承,並定義一個接口(例如IMyDataGrid)並在每個datagridview類(策略模式)中實現該接口。但這裏的問題是,你失去了代碼重用的好處,繼承給你的意思是你必須創建許多不同的表單,在它們上面放置一個datagridview - 有效地將相同的代碼複製並粘貼到每個表單中。壞。
有沒有更好的方法來實現這個目標?
爲什麼不直接從GridView繼承並創建一個在Windows窗體上使用的控件? – Macros 2009-08-20 15:06:55