3

我想为我的一些自定义的抽象基类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.

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

信息:有一个虚拟方法的问题,而不是抽象类,但没有适合我的解决方案。

4

4 回答 4

2

您可以将函数标记为虚拟并在继承类中覆盖它们,而不是使用抽象类

于 2010-05-04T14:03:52.083 回答
1

最好的解决方案在这里:

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

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

于 2011-12-07T09:33:18.440 回答
0

试试Urban Potato的这个解决方案,它对我有用,但有一个奇怪的副作用,我从来没有真正解释过,也从来没有一个好的解决方法。也许你会很幸运,不会有那种副作用!

于 2010-09-27T17:30:07.773 回答
0

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

于 2010-09-27T17:43:01.527 回答