Visual Studio:设计一个派生自抽象基类的UserControl类

时间:2010-05-04 11:19:52

标签: visual-studio user-controls designer abstract base

我希望为我的一些自定义UserControl提供一个抽象基类。原因很明显:它们共享一些常见的属性和方法(一些元素的基本实现)实际上是一个接口),我想只实现一次。

我通过定义我的抽象基类来完成这个:

public abstract class ViewBase : UserControl, ISomeInterface

然后我像往常一样,与设计师一起实施我的一个观点:

public partial class SpecialView : UserControl //all OK

到这里一切都很好。现在我用抽象基类替换我的SpecialView类的派生:

public partial class SpecialView : ViewBase //disrupts the designer

现在,Visual Studio 2008中的设计人员将不再工作,并说明:The designer must create an instance of type 'ViewBase' but it cannot because the type is declared as abstract.

我如何规避这个?我只是不想为所有这些视图复制相同的代码。

信息:有一个问题question with virtual methods,而不是抽象类,但对我来说没有合适的解决方案。

4 个答案:

答案 0 :(得分:2)

您可以将函数标记为虚拟并在继承类

中覆盖它们,而不是使用抽象类

答案 1 :(得分:1)

最好的解决方案是:

http://wonkitect.wordpress.com/2008/06/20/using-visual-studio-whidbey-to-design-abstract-forms/

现在使用它,它很优雅,可以解决潜在的问题而不会破坏你的OOP设计。

答案 2 :(得分:0)

尝试使用Urban Potato中的这个解决方案,这个解决方案对我有用,strange side effect我从未真正解释过,并且从未得到过很好的解决方法。也许你会很幸运,也不会有副作用!

答案 3 :(得分:0)

有人可能会说,在设计哲学方面,期望能够在Designer中使用抽象控件是没有意义的。抽象类倾向于模拟一种类型的对象,仅仅知道它是一个“X”并没有充分描述它 - 没有抽象的鸟或汽车这样的东西,它总是特定类型的鸟或汽车。以这种方式看待它,如果你想在设计器中查看自定义控件,它是一个特定类型的控件而不是抽象控件,否则你在看什么?我可以看到为什么它很烦人,但我也可以看到为什么Designer以这种方式编码。