2009-03-05 5 views
3

Ich habe ein wenig über Design-Time Attributes for Components gelesen. Dort habe ich ein Attribut namens CategoryAttribute gefunden. Auf dieser Seite heißt es, dassC#: Verwendung von CategoryAttribute.Appearance Eigenschaft

Die Category Klasse die folgenden allgemeinen Kategorien definiert:

Und dann listet auf eine Reihe von gemeinsamen Kategorien. Einer von ihnen ist zum Beispiel Appearance. Ich dachte, brilliant! Dann kann ich [Category.Appearance] anstelle von [Category("Appearance")] verwenden! Aber anscheinend konnte ich nicht? Versucht es zu schreiben, aber Intellisense würde es nicht aufnehmen und es würde nicht kompilieren. Fehle ich hier etwas? War es vielleicht nicht das diese Eigenschaften waren? Wenn nicht, wozu dienen sie? Wenn ja, wie benutze ich sie?

Und ja, ich habe die richtige using um den Zugriff auf die CategoryAttribute zu haben, verursachen [Category("Whatever")] Arbeit tun. Ich frage mich nur, wie ich diese definierten gemeinsamen Kategorien verwende.

Antwort

3

Wie Sie auf MSDN sehen können, ist es nur eine Getter-Eigenschaft, kein Setter.

public static CategoryAttribute Appearance { get; } 

In der Tat ist hier, was der Code wie folgt aussieht Reflektor:

public static CategoryAttribute Appearance 
    { 
     get 
     { 
      if (appearance == null) 
      { 
       appearance = new CategoryAttribute("Appearance"); 
      } 
      return appearance; 
     } 
    } 

So ist es nicht ein verdammt viel zu tun.

Die einzige Anwendung ich es sehen kann, ist so etwas wie diese:

  foreach (CategoryAttribute attrib in prop.GetCustomAttributes(typeof(CategoryAttribute), false)) 
      { 
       bool result = attrib.Equals(CategoryAttribute.Appearance); 
      } 

Grundsätzlich, wenn mithilfe von Reflektion in der Klasse suchen, können Sie leicht prüfen, welche Kategorie diese ohne gehört ein zu tun String Vergleich. Aber Sie können es nicht in der Art und Weise verwenden, wie Sie es unglücklicherweise versuchen.

+0

hm, das ist einfach nur nervig ... hehe. Was ist der Punkt in einem konstant definierten Attribut, wenn es nur an einem Ende verwendbar ist? Naja. Danke für die Info :) – Svish

+0

Vielleicht könntest du deine eigene Kategorien Klasse erstellen. Werfen Sie einen Blick [hier] (http://weblogs.asp.net/sfeldman/archive/2009/05/07/categoryattribute.aspx) –

2

Auf die statische Eigenschaft wird über CategoryAttribute.Appearance zugegriffen. Aber das Attribut-System erlaubt es Ihnen nicht, Code in einer Attribut-Deklaration aufzurufen, und ich denke, das ist der Grund, warum es nicht für Sie kompiliert wird. Sie werden sich wahrscheinlich mit [Category ("Appearance")] begnügen müssen.