NET Modello spiegazione
-
21-09-2019 - |
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?
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.