我一直在一次又一次地出现,但我不确定我做事的方式是错误的,还是我可以以不同的方式做事。使用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