我有有多个标签的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”对象,而不能。 –