Domanda

Prima di tutto, devo dire che ho intenzione di parlare di System.ComponentModel.Component.

Lo sai, ho capito, che il .NET Component Model offre possibilità (tramite Site Services) per definire Components separati, in modo che possano comunicare tra di loro in un modo loosely coupled, e che ogni Component è facilmente sostituibile.

Ma il mio punto è che posso realizzare questo altrimenti: Voglio dire, se io disegno la SW nel modo Object Oriented Programming destra, posso mediante Abstract classes, Interfaces ecc raggiungere tutti menzionato funzionalità / interoperabilità.

Poi PERCHE ' e quando dovrei fare affidamento sul modello di componenti?

È stato utile?

Soluzione

Bene, lo si può fare con le proprie classi base, interfacce e così via. In realtà, questo è esattamente ciò che la roba in System.ComponentModel è . Si tratta di un insieme comune di interfacce e classi di base in modo da poter implementare i componenti e li usa con le implementazioni di altre persone.

Se hai appena fatto le vostre proprie classi base e interfacce, quindi chiunque volesse per interfacciarsi con il codice avrebbe dovuto utilizzare le classi. E se volevano integrarsi con due componenti di vendor diversi in una sola volta?

In particolare tutte le cose in WinForms usa la roba System.ComponentModel per implementare i controlli che si possono mettere sul modulo. Dovevano scegliere alcuni di interfaccia per rappresentare che, quindi perché non quello definito nel System.ComponentModel? Perché dovrebbero costruire la propria, quando c'è già uno perfettamente progettato già disponibile?

Altri suggerimenti

E 'consente di fornire in fase di progettazione capacità per l'utilizzo in es Visual Studio.

"Gli spazi dei nomi System.ComponentModel contengono tipi che implementano la fase di esecuzione e in fase di progettazione il comportamento di componenti e controlli." La funzionalità che fornisci potrebbe essere qualsiasi cosa (BackgroundWorker fa qualcosa di molto diverso da un ComboBox eppure sono entrambi un Component).

Quello che il ComponentModel fornisce sia i metadati e il payoff è che è possibile progettare componenti che possono essere utilizzati nella progettazione visiva. Quindi:

public interface IDesigner : IDisposable {

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

Lo spazio dei nomi fornisce anche la roba TypeDescriptor / convertitore, nuovamente utilizzabile per l'accesso in fase di progettazione per le proprietà.

(E 'stato suggerito che si potrebbe usare System.ComponentModel come una sorta di contenitore CIO non ho mai visto nessuno fare questo,. Come dici tu, per ciò che offre niente di più di solo un buon design).

Quindi: considerare l'utilizzo di System.ComponentModel.Component quando si sta anche desidera fornire un IDesigner con il componente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top