Wie baut man ein Attribut in C#?


Thomas Wölfer
Thomas Wölfer

17. August 2004


In .Net kann man Metadaten an Klassen und Methoden hängen um diese mit zusätzlichen Informationen auszustatten. Die Zuordnung dieser Metadaten zu einer Methode (oder Klasse...) erfolgt dabei über 'Attribute'.

Dabei gibt es eine ganze Menge von mitgelieferten Attributen mit denen man zum Beispiel erklärende Texte an Property-Accessors zuweisen kann: Diese Texte werden dann vom Property-Grid im 'Hilfe'-Bereich angezeigt. Man kann Attribute aber auch selbermachen - das ist sogar ganz einfach.

Angenommen man hat einen get/set Accessor mit dem man einen double-Wert einstellen kann:

double Groesse
{
   get{ return this.groesse; }
   set{ this.groesse = value; }
}

Nun will man den Accessor mit einem zulässigen Maximalwert ausstatten. Dafür gibt es kein mitgeliefertes Attribut, man möchte aber das die Sache hinterher ungefähr wie folgt aussieht:

[ MaximumValue( 400.0)]  // 400 soll der maximalwert sein
double Groesse
{
// ... 

Damit kann man nun an anderer Stelle im Quellcode (zum Beispiel auf der Dialogbox in der der Anwender den Wert angeben kann) nach einem MaximumValue Attribute suchen ( Type.Attributes ), und anhand dessen Wert überprüfen ob die angegebene Zahl OK ist. Stellt sich die Frage aus welchem Himmel das MaximumValue Attribut dann fällt....

Attribute selbermachen: So gehts

Eigentlich ist die Sache ganz einfach: Ein Attribut ist einfach eine Klasse die von System.Attribute abgeleitet wird. Die Klasse kann verschiedene Konstruktoren haben, und durch das attributieren in den eckigen Klammern wird dann der jeweils passende Konstruktor aufgerufen. Das Grundgerüst von MaxValue sieht also einfach so aus:

public class MaxValueAttribute : System.Attribute
{
   private double maxValue;
   public MaxValueAttribute( double maxValue)
   {
      this.maxValue = maxValue;
   }
   double Size
   {
      get
      {
          return this.maxValue;
      }
   }
}