.
Anmeldung | Registrieren | Hilfe | Posteingang
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

Verwendung von Attributen

Attribute sind Begleitinformationen von Klassen, Klassen-Mitgliedern, Events, Delegates, Strukturen, Aufzählungen u.v.a.

Wenn entsprechende Attribute gesetzt wurden, können diese mittels Reflection ausgelesen werden.

Attribute Klassen:

[AttributeUsage(AttributeTargets.Class)]
public class Person : Attribute
{
  private string _vorname;
  private string _nachname;

  public string Vorname
  {
    get { return _vorname; }
    set { this._vorname = value; }
  }

  public string Nachname
  {
    get { return _nachname; }
    set { this._nachname = value; }
  }

  public Person(string Vorname, string Nachname)
  {
    this._nachname = Nachname;
    this._vorname = Vorname;
  }
}

Wie man hier sehen kann handelt es sich um eine ganz normale .NET Klasse welche in C# geschrieben wurde. Wenn man eigene Attribute einsetzen möchte dann muss diese Klasse mit dem Attribute AttributeUsage versehen werden. AttributeUsage beschreibt die Verwendung einer benutzerdefinierten Attributklasse. Desweiteren leite ich meine Klasse von der Basisklasse System.Attribute ab!

Als nächstes definieren ich drei Klassen die meine selbst definierte Attribute Klasse verwenden.

Verwendung der Attribute Klassen:

[Person("René", "Paschold")]
public class FirstClass
{
  /* ... */
}

[Person("Shinja", "Strasser")]
public class SecondClass
{
  /* ... */
}

[Person("Andy", "Look")]
public class ThirdClass
{
  /* ... */
}

Meine Attribute Klasse enthält einen Konstruktor welcher zwei Parameter erwartet, nämlich Vorname und Nachname. Bei der Verwendung meiner Attribute Klasse gebe ich jetzt über den Konstruktor die gezeigten Begleitinformationen mit. Damit das ensprechende Beispiel vollständig ist zeigt folgender Code wie man mittles Reflection entsprechende Attribute auslesen kann.Auslesen von benutzerdefinierten Attributen:

using System;
using System.Reflection;

public class MeineAnwendung
{
  public static void Main(string[] args)
  {
    AutorInformation(typeof(FirstClass));
    AutorInformation(typeof(SecondClass));
    AutorInformation(typeof(ThirdClass));
  }

  public static void AutorInformation(Type t)
  {
    Console.WriteLine("Autor Informationen über {0}", t);
    Attribute[] attrs = Attribute.GetCustomAttributes(t);

    foreach(Attribute attr in attrs)
    {
      if (attr is Person)
      {
        Person a = (Person)attr;
        Console.WriteLine("--- {0} {1}", a.Vorname, a.Nachname);
      }
    }
    Console.WriteLine();
  }
}

Die Klasse Attribute welche im Namespace System zuhause ist besitzt eine statische Methode GetCustomAttributes(). Diese Methode ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, das auf einen bestimmten Member einer Klasse angewendet wurde. Wenn es mehrere Attribute gibt können diese Werte in ein Array gespeichert werden. Dieses Array beinhaltet nun die Attribute die vorher von mir definiert wurden.

Mit einer foreach Schleife können diese Attribute jetzt ausgelesen und angezeigt werden.

von Rene Paschold, 11.06.2008 zugeordnet zu C# , Cliententwicklung , Tutorials , Webentwicklung .

Kommentare

Endlich, endlich mal ein leicht verständliche Erklärung! Ich mag es übersichtlich und ohne verwirrenden Schnickschnack - genau mein Geschmack. Danke dafür. :)
von Cyron, 23.06.2008.

Kleine Anmerung, Klassennamen für Attribute sollten (nach Framework-Design-Guideline, desweiteren erkennt man so direkt das es ein Attribute ist) auch immter mit Attribute enden, hier also PersonAttribute. Bei der Anwendung kann jedoch das Attribute weggelassen werden.
von Albert Weinert, 06.07.2008.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 2891
  • Zur Druckversion
  • Artikel von Rene Paschold

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum