我希望为我的一些自定义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,而不是抽象类,但对我来说没有合适的解决方案。
答案 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以这种方式编码。