2009-12-15 7 views
7

Mi considero uno sviluppatore .NET ragionevolmente esperto ma non ho quasi mai utilizzato direttamente i tipi nello spazio dei nomi System.ComponentModel. (Ho implementato alcuni attributi personalizzati e li ho consumati tramite la riflessione).Utilizzo dello spazio dei nomi System.ComponentModel

In quali tipi di scenari sono utili tipi come Componente, Contenitore, PropertyDescriptor, TypeDescriptor, License e TypeConverter?

Ho visto spesso System.ComponentModel menzionato quando si parla di "designer" come quelli disponibili in Visual Studio.

Questi tipi sono utili solo quando, ad esempio, si desidera creare un controllo personalizzato con un buon visual designer (ad esempio proprietà personalizzate, ecc.)? O potrei anche usarli in un codice più generale?

risposta

2

Come te, ho usato solo le classi specifiche vi elenco (Component, Container, ecc) indirettamente, ossia in forma già-derivato (ogni System.Windows.Forms.Control deriva da Component, etc.). Quindi non ho altro da aggiungere lì. Quando si aggiungono proprietà ai controlli personalizzati, quasi sempre utilizzo molte delle classi DefaultValueAttribute, DesignerSerializationVisibilityAttribute e altre *Attribute. Ma questo è abbastanza comune, e probabilmente non è quello che la tua domanda è stata dopo.

Per quanto riguarda il resto dello spazio dei nomi, ho bisogno di un sacco di elaborazione asincrona, e fare uso frequente di quanto segue:

  • AsyncOperation
  • AsyncOperationManager
  • ProgressChangedEventHandler/ProgressChangedEventArgs
  • RunWorkerCompletedEventHandler/RunWorkerCompletedEventArgs
+0

Per elaborazione asincrona In realtà ho usato il modello di programmazione asincrono, ad esempio. delegati e BeginInvoke(), EndInvoke(). Come differiscono AsyncOperation ecc., Lo sai? – Ash

+0

Quando si crea una classe che espone eventi asincroni in genere si utilizza AsyncOperation, ecc. In altre parole, quando si è il fornitore di eventi asincroni, non il consumatore. Se si crea una classe con i metodi DoWorkAsync() e CancelAsync() e gli eventi DoWorkCompleted e DoWorkProgressUpdated, è possibile utilizzarli per assicurarsi che gli eventi vengano richiamati sul thread corretto. –