2009-12-15 11 views
7

Ich halte mich für einen einigermaßen erfahrenen .NET-Entwickler, aber ich habe fast nie direkt Typen im Namespace System.ComponentModel verwendet. (Ich habe ein paar benutzerdefinierte Attribute implementiert und über Reflektion konsumiert).System.ComponentModel Namespace-Verwendung

In welchen Szenarien sind Typen wie Component, Container, PropertyDescriptor, TypeDescriptor, License und TypeConverter am nützlichsten?

Ich habe oft System.ComponentModel erwähnt, wenn es um "Designer" wie die in Visual Studio verfügbaren geht.

Sind diese Typen nur nützlich, wenn Sie beispielsweise ein benutzerdefiniertes Steuerelement mit einem netten visuellen Designer erstellen möchten (z. B. benutzerdefinierte Eigenschaften usw.)? Oder könnte ich sie auch in einem allgemeineren Code verwenden?

Antwort

2

Genau wie Sie habe ich verwendet, um nur die Klassen, die Sie Liste (Component, Container usw.) indirekt, das heißt in bereits abgeleitete Form (jede System.Windows.Forms.Control leitet sich von Component, etc.). Also habe ich nichts mehr hinzuzufügen. Beim Hinzufügen von Eigenschaften zu benutzerdefinierten Steuerelementen verwende ich fast immer viele der Klassen DefaultValueAttribute, DesignerSerializationVisibilityAttribute und andere *Attribute. Aber das ist ziemlich häufig, und wahrscheinlich nicht, was deine Frage danach war.

Was den Rest des Namespace, ich habe für viele asynchrone Verarbeitung benötigen, und häufige Verwendung der folgenden machen:

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

Für asynchrone Verarbeitung Ich habe tatsächlich das Async Programming Model verwendet, d. Delegaten und BeginInvoke(), EndInvoke(). Wie unterscheiden sich AsyncOperation usw., weißt du? – Ash

+0

Wenn Sie eine Klasse erstellen, die asynchrone Ereignisse verfügbar macht, verwenden Sie normalerweise AsyncOperation usw. Mit anderen Worten, wenn Sie der Anbieter von asynchronen Ereignissen sind, nicht der Konsument. Wenn Sie mit den Methoden DoWorkAsync() und CancelAsync() sowie DoWorkCompleted und DoWorkProgressUpdated eine Klasse erstellen, können Sie diese verwenden, um sicherzustellen, dass Ereignisse im richtigen Thread aufgerufen werden. –