Attribut

Aus Das Sopra Wiki
Wechseln zu: Navigation, Suche



Mit Attributen ist es möglich, Informationen zu Programmen hinzuzufügen. Es handelt sich bei diesen Informationen um Metadaten. Diese können von der CLR (Common Language Runtime) zur Laufzeit ausgewertet werden. Über Reflection ist es auch möglich, diese Metadaten innerhalb der eigenen Programme auszuwerten.

Eines dieser Attribute ist das Attribut Flags, das im Zusammenhang von Bitfeldern behandelt wird. Ohne Attribute müsste dem Programm zur Laufzeit mitgeteilt werden, dass es sich bei der Aufzählung um ein Bitfeld handelt. Üblicherweise geschieht das über ein eigenes Konstrukt, oder man definiert von vorne herein eine Aufzählung, die nur ein Bitfeld sein kann. Über Attribute ist man da wesentlich flexibler.

Ein anderes Beispiel ist das Attribut Obsolete. Mit diesem Attribut lässt sich ein bestimmter Programmteil als veraltet deklarieren. Der Compiler wird dann beim Kompilieren eine Warnung ausgeben. Der Warnungstext ist dabei selbst definierbar:

[System.Obsolete("This class is obsolete. Use Car")]
class Automobile
{
   public void CreateAutomobile()
   {
      // Do Something old   
   }
}

class Car
{
   [System.Obsolete("This method is obsolete. Use CreateCar(int numWheels, System.Drawing.Color color)", true]
   public void CreateCar(int numWheels)
   {
      // Create a car with some wheels
   }

   public void CreateCar(int numWheels, System.Drawing.Color color)
   {
      // Create a car with some wheels and a certain color
   }
}

Das Schlüsselwort true innerhalb des Obsolete-Schlüsselworts sorgt dafür, dass bei Benutzung dieser Methode ein Compiler-Fehler erzeugt wird. Dies ist dann von Vorteil, wenn ein Fehler innerhalb einer Methode (oder Klasse) entdeckt wurde und dieser in allen Programmen, die diese verwenden, korrigiert werden muss.

Attribute leiten sich, wie alles andere in .NET auch, von einer Oberklasse, in diesem Fall der Klasse System.Attribute ab. Aus der Namenskonvention heraus haben alle Attribute den Suffix Attribute. Dies hat den Grund, dass der Compiler zunächst nach den Klassennamen sucht, die verwendet werden. Im Beispiel von Flags sucht er zunächst nach einer Klasse Flags. Wird diese nicht gefunden, hängt der Compiler automatisch die Endung Attribute an den Namen an und sucht dann nach dieser Klasse, also in dem Fall nach FlagsAttribute. Diese Namenskonvention ist bei allen Attributen in .NET vertreten. Zum Beispiel auch bei Obsolete, dessen Klasse ObsoleteAttribute heißt oder auch bei Serializable mit SerializableAttribute.

Alle Felder und Eigenschaften von Attributen, die als benannte Parameter fungieren sollen, müssen öffentlich und les-/beschreibbar sein. Des Weiteren können die Elemente, für die ein Attribut angewendet werden kann, frei festgelegt werden.

Dieses Beispiel zeigt die Deklaration und Verwendung eines Todo-Attributs, adaptiert aus Frank Eller und Michael Kofler, "Visual C# - Grundlagen, Programmiertechniken, Windows-Programmierung", Addison-Wesley. ISBN 3-8273-2255-3.

Ein Attribut kennzeichnet in .NET eine Markierung, die auf

angewendet werden kann.

Um zum Beispiel eine Klasse als serialisierbar zu markieren markiert man sie mit dem Attribut [Serializable]

[Serializable]
public class Klasse
{ }

Siehe auch

  1. MSDN-Artikel zu Attributen