首先,我必须说我要谈谈 System.ComponentModel.Component.

你知道,我明白, .NET Component Model 提供(通过站点服务)定义单独的能力 Components, ,因此它们可以以松散耦合的方式相互通信,并且每个 Component 易于更换。

但我的观点是,我可以通过其他方式实现这一目标:我的意思是如果我设计正确的软件 Object Oriented Programming 方式,我可以通过 Abstract classes, Interfaces ETC。实现所有提到的功能/互操作性。

然后 为什么什么时候 我应该依赖组件模型吗?

有帮助吗?

解决方案

好了,你可以用自己的基类,接口等做到这一点。事实上,这正是在System.ComponentModel东西的的。这是一套通用的接口和基类,这样就可以实现你的组件,并与其他人的实现方式使用它们。

如果你只是做了自己的基类和接口,那么任何人谁希望与您的代码的接口将不得不使用自己的类。如果他们想立刻与两个不同的供应商的组件整合什么?

在特别所有的WinForms的东西使用位于System.ComponentModel的东西来实现,你可以把你的窗体上的控件。他们不得不选择的一些的接口来表示,所以为什么不在System.ComponentModel定义的?为什么他们会建立自己的,当已经有一个非常精心设计的一个已经存在?

其他提示

它可以让你提供 设计时 用于例如视觉工作室。

“这 System.ComponentModel 名称空间包含实现组件和控件的运行时和设计时间行为的类型。“您提供的功能可能是任何东西(BackgroundWorker 做一些与a非常不同的事情 ComboBox 但他们都是 Component).

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

public interface IDesigner : IDisposable {

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

命名空间还提供 TypeDescriptor / Converter 内容,同样可用于设计时访问属性。

(有人建议您可以使用 System.ComponentModel 作为一种 IoC 容器。我从未见过有人这样做;正如你所说,为此它只提供了良好的设计)。

所以:当您还想提供一个时,请考虑使用 System.ComponentModel.Component IDesigner 与你的组件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top