.NET组件模型解释

10

首先,我要说的是,我将谈论System.ComponentModel.Component

你知道,我理解,.NET组件模型通过站点服务提供了定义单独的组件的能力,因此它们可以以松散耦合的方式彼此通信,并且每个组件都很容易被替换。

但我的观点是,我可以通过正确的面向对象编程方式实现这一点: 我的意思是,通过使用抽象类接口等手段,我可以实现所有提到的功能/互操作性。

那么为什么何时应该依赖于组件模型呢?

2个回答

8

你可以使用自己的基类、接口等方式来实现。事实上,System.ComponentModel中的内容就是这样的一组公共接口和基类,使您能够实现组件并与其他人的实现一起使用。

如果您只是自己编写基类和接口,那么任何想要接口化您的代码的人都必须使用您的类。而如果他们想要同时集成两个不同供应商的组件呢?

特别是WinForms中的所有内容都使用System.ComponentModel的东西来实现可以放在表单上的控件。他们必须选择一个接口来表示它,那为什么不选择System.ComponentModel中定义的接口呢?既然已经有了一个完美设计的接口,他们为什么还要自己构建一个呢?


3

它允许您为诸如Visual Studio之类的应用程序提供设计时功能。

"System.ComponentModel命名空间包含实现组件和控件的运行时和设计时行为的类型。" 您提供的功能可以是任何内容(BackgroundWorkerComboBox的功能非常不同,但它们都是一个Component)。

ComponentModel提供元数据,而回报是您可以设计可在可视化设计器中使用的组件。因此:

public interface IDesigner : IDisposable {

        IComponent Component {get;}        
        DesignerVerbCollection Verbs {get;}
        void DoDefaultAction();
        void Initialize(IComponent component);
}

命名空间还提供了TypeDescriptor / Convertor等内容,可用于设计时访问属性。

(有人建议您可以将System.ComponentModel视为一种IoC容器。我从未见过有人这样做;正如您所说,对于它并没有比良好的设计更多的优势)。

因此:考虑在您还想为组件提供IDesigner时使用System.ComponentModel.Component。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接