Cal*_*nus 10 .net abstract-class abstract winforms
我正在努力解决我一次又一次出现的情况,但我不确定我做事的方式是错误的还是我可以用不同的方式做事.
一个例子:
我有一个Windows窗体,它有一个DataGridView,有一些私有方法来执行datagrid的验证,并解释datagridview上的鼠标右键等.这个窗体本质上是一个"抽象"类,永远不会直接实例化.
然后我从这个基类继承并以各种方式(模板模式)定制它,例如定义datagridview的列和特定于这些列的特定格式化方法等.
当我使用这些类时,基类公共方法构成了我的接口,我可以实例化我想要的特定类型的datagridview,并通过公共接口对其进行操作.可爱.
问题:
主要问题是,您实际上无法将Windows窗体类声明为抽象,而不会导致Visual Studio设计器因为无法实例化这些抽象类而导致抖动.
一些方案:
目前我正在"实现"我想要覆盖的基类中的那些方法:
throw new NotSupportedException();
Run Code Online (Sandbox Code Playgroud)
所以至少如果我忘记覆盖形成我的界面的这些方法之一.这对我来说似乎很臭,我真的不喜欢它.
我玩弄的另一个解决方案是完全取消继承并定义一个接口(例如IMyDataGrid)并在每个datagridview类中实现它(一种策略模式).这里的问题是你失去了代码重用的好处,继承让你意味着你必须创建许多不同的表单,在它们上放一个数据网格视图 - 有效地复制和粘贴相同的代码到每一个.坏.
有没有更好的方法来实现这一目标?
根据您的要求,有多种方法可以做到这一点。
DataGridView实现接口来执行自定义逻辑virtual方法的具体类而不是使用abstract类您必须选择最适合您需求的选项。在不了解您提出问题的领域和具体情况的情况下,我认为我们无法给您 100% 确定的答案。