2010-05-04 68 views
3

我想为我的一些自定义UserControl提供抽象基类。原因很明显:它们共享一些共同的属性和方法(实际上是一个接口的某些元素的基本实现),我只想实现它们一次。Visual Studio:设计一个派生自抽象基类的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,而不是抽象类,但没有适合我的解决方案。

回答

2

而不是使用抽象类,你可以标记功能,虚拟和继承的类重写它们

+0

??其实,我不想重写,我想要一个我可以继承的实现。我可以在具有实现的基类中使用虚拟方法吗? – Marcel 2010-05-05 08:17:33

+0

最后,我完成了像提议的那样。 – Marcel 2010-10-11 15:17:00

+0

@Moe我可以在基类中拥有一个虚拟方法吗?虚拟方法可以具有可以被覆盖的实现。如果没有抽象/虚拟方法,为什么选择抽象基础?在这种情况下使用非抽象的基础就好了。你失去的唯一的事情就是你可以在这种情况下创建一个基础实例。使用ABC你将无法做到。 – MPavlak 2012-05-17 13:06:22

0

尝试从Urban Potato这个解决方案,它为我工作,与我从来没有真正解释一个strange side effect,和从来没有得到一个很好的解决方法。也许你会很幸运,不会有这种副作用!

0

有人可能会争辩说,在设计哲学方面没有意义,希望能够在Designer中使用抽象控件。一个抽象类倾向于建立一种对象类型,只知道它是一个'X'没有充分描述它 - 没有抽象的鸟或汽车这样的东西,它总是一种特定类型的鸟或汽车。用这种方式来看,如果你想在设计器中查看一个自定义控件,那么就是是一种特定类型的控件而不是抽象控件,否则你在看什么?我可以明白为什么它很烦人,但我也可以看出设计师为什么用这种方式进行编码。

相关问题