我有一个我想要构建的控件框架的概念。这个想法的不同之处在于,我不打算采取“一刀切”的方法或“一种控制来统治所有人”的方法。
举个例子,Telerik做了一个非常好的网格控件,ComponentOne,Xceed等等。然而,它们都是具有成百上千个方法和属性、复杂的对象模型层次结构等的巨大控件。通常情况下,这些网格对于你所需要的东西来说是大材小用了,但你仍然必须承担学习整个网格来做一些简单事情的艰巨任务。
我的概念更多的是一种“混合”的方法。在这里你可以创建一个非常简单的控件,然后构建你可以“添加”到控件中的功能。例如,您有一个简单的网格,并且希望为每个网格添加具有页眉和页脚的网格“部分”。
好的,那么问题出在哪里?这样做的传统方法是通过多重继承,这是C#不支持的。即使它确实支持它,我仍然认为MI增加的问题比它解决的问题更多。
所以我正在征集关于如何处理这个问题的意见。MEF会是一个潜在的解决方案吗?
编辑:
我想到的一件事是,可以使用表达式树从各种表达式构建控件。我得再仔细考虑一下,但这是一个有趣的概念。
另一个可能的选项可能是“控件生成器”,它基于选定的特征生成部件。这看起来更复杂,但使用T4可能是可管理的。
发布于 2010-12-02 02:01:37
几个选项
var window=new HorizontalScrollingWindowDecorator(new VerticalScrollingWindowDecorator(new Window));发布于 2010-12-02 01:51:17
就我个人而言,我认为多重继承无论如何都不是实现这种设计的好方法。在大多数情况下,多重继承似乎是一种糟糕的设计。继承对组件之间的关系过于严格。
组合要灵活得多,在这种情况下,MEF将是一个很好的起点。
控件的基类将是一个行为容器--本质上是一个MEF容器。
它仍然留下了其他类如何与您的控件交互的问题。有很多选择。例如,基本控件上的标准接口,消息传递,甚至使用C# 4.0中的动态绑定。
发布于 2010-12-02 01:45:02
我想试着回答,但不评论这是否是一个值得解决的问题。
我还没有在组件中尝试过这一点,但理论上有Decorator Pattern:您可以在运行时添加插件来拦截控件(键盘和鼠标)的输入和(屏幕)输出。
https://stackoverflow.com/questions/4327223
复制相似问题