2010-03-19 19 views
6

Antes que nada, tengo que decir que voy a hablar sobre System.ComponentModel.Component.Explicación del Modelo de Componente .NET

Ya sabes, entiendo, que el .NET Component Model proporciona la capacidad (a través de servicios web) para definir por separado Components, para que puedan comunicarse entre sí de una manera imprecisa, y que cada Component es fácilmente reemplazable.

Pero mi punto es, que puedo lograr esto de otra manera: quiero decir que si yo diseño SO por la derecha Object Oriented Programming manera, puedo por medio de Abstract classes, etc. Interfaces conseguir toda la funcionalidad mencionada/interoperabilidad.

Entonces ¿POR QUÉ y ¿CUÁNDO debo confiar en el modelo de componente?

Respuesta

5

Bueno, puedes hacerlo con tus propias clases de base, interfaces, etc. De hecho, eso es exactamente lo que sucede en System.ComponentModel es. Es un conjunto común de interfaces y clases base para que pueda implementar sus componentes y utilizarlos con las implementaciones de otras personas.

Si acaba de crear sus propias clases base e interfaces, entonces cualquiera que quiera interactuar con su código debería utilizar sus clases. ¿Y si quisieran integrarse con dos componentes diferentes de proveedores a la vez?

En particular, todas las cosas en WinForms usan las cosas de System.ComponentModel para implementar los controles que puede poner en su formulario. Tuvieron que elegir alguna interfaz para representar eso, ¿por qué no la definida en System.ComponentModel? ¿Por qué construirían el suyo, cuando ya hay uno ya perfectamente disponible?

2

Le permite proporcionar tiempo de diseño capacidad de uso en, p. Estudio visual.

"Los espacios de nombre System.ComponentModel contienen tipos que implementan el comportamiento en tiempo de ejecución y tiempo de diseño de los componentes y controles." La funcionalidad que proporciona puede ser cualquier cosa (BackgroundWorker hace algo muy diferente a un ComboBox pero ambos son un Component).

Lo que el ComponentModel proporciona son los metadatos y la recompensa es que puede diseñar componentes que puedan usarse en el diseñador visual. Por lo tanto:

public interface IDesigner : IDisposable { 

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

El espacio de nombres también proporciona la materia TypeDescriptor/convertidor, de nuevo utilizable para el acceso en tiempo de diseño a las propiedades.

(Se ha sugerido que podría usar System.ComponentModel como una especie de contenedor de IoC. Nunca he visto a nadie hacer esto, como usted dice, para eso no ofrece nada más que un buen diseño).

Entonces, considere usar System.ComponentModel.Component cuando también desee proporcionar un IDesigner con su componente.

Cuestiones relacionadas