AttributeAttributes

Typen, Member und andere Entitäten in einem C#-Programm unterstützen Modifizierer, die bestimmte Aspekte ihres Verhaltens steuern.Types, members, and other entities in a C# program support modifiers that control certain aspects of their behavior. Der Zugriff auf eine Methode wird beispielsweise mithilfe der Modifizierer public, protected, internal und private kontrolliert.For example, the accessibility of a method is controlled using the public, protected, internal, and private modifiers. C# generalisiert diese Funktionalität, indem benutzerdefinierte Typen deklarativer Informationen an eine Programmentität angefügt und zur Laufzeit abgerufen werden können.C# generalizes this capability such that user-defined types of declarative information can be attached to program entities and retrieved at run-time. Programm geben diese zusätzlichen deklarativen Informationen durch das Definieren und Verwenden von Attributen an.Programs specify this additional declarative information by defining and using attributes.

Im folgenden Beispiel wird ein HelpAttribute-Attribut deklariert, dass in Programmentitäten platziert werden kann, um Links zur zugehörigen Dokumentation bereitzustellen.The following example declares a HelpAttribute attribute that can be placed on program entities to provide links to their associated documentation.

using System;

public class HelpAttribute: Attribute
{
    string url;
    string topic;
    public HelpAttribute(string url) 
    {
        this.url = url;
    }

    public string Url => url;

    public string Topic {
        get { return topic; }
        set { topic = value; }
    }
}

Alle Attributklassen werden von der Attribute Basisklasse abgeleitet, die von der Standardbibliothek bereitgestellt wird.All attribute classes derive from the Attribute base class provided by the standard library. Attribute können durch Angabe ihres Namens angewendet werden, zusammen mit beliebigen Argumenten. Diese müssen in eckigen Klammern genau vor der zugehörigen Deklaration eingefügt werden.Attributes can be applied by giving their name, along with any arguments, inside square brackets just before the associated declaration. Wenn ein Attributname auf Attribute endet, kann dieser Teil des Namens beim Verweis auf das Attribut weggelassen werden.If an attribute’s name ends in Attribute, that part of the name can be omitted when the attribute is referenced. Beispielsweise kann das HelpAttribute-Attribut wie folgt verwendet werden.For example, the HelpAttribute attribute can be used as follows.

[Help("https://docs.microsoft.com/dotnet/csharp/tour-of-csharp/attributes")]
public class Widget
{
    [Help("https://docs.microsoft.com/dotnet/csharp/tour-of-csharp/attributes", 
    Topic = "Display")]
    public void Display(string text) {}
}

In diesem Beispiel wird HelpAttribute an die Widget-Klasse angefügt.This example attaches a HelpAttribute to the Widget class. Darüber hinaus wird der Display-Methode in der Klasse ein weiteres HelpAttribute hinzugefügt.It adds another HelpAttribute to the Display method in the class. Die öffentlichen Konstruktoren einer Attributklasse steuern die Informationen, die beim Anfügen des Attributs an eine Programmentität angegeben werden müssen.The public constructors of an attribute class control the information that must be provided when the attribute is attached to a program entity. Zusätzliche Informationen können angegeben werden, indem auf öffentliche Eigenschaften mit Lese-/Schreibzugriff der Attributklasse verwiesen wird (z.B. wie der obige Verweis auf die Topic-Eigenschaft).Additional information can be provided by referencing public read-write properties of the attribute class (such as the reference to the Topic property previously).

Wenn per Reflektion ein bestimmtes Attribut angefordert wird, wird der Konstruktor für die Attributklasse mit den in der Programmquelle angegebenen Informationen aufgerufen, und die resultierende Attributinstanz wird zurückgegeben.When a particular attribute is requested through reflection, the constructor for the attribute class is invoked with the information provided in the program source, and the resulting attribute instance is returned. Wenn zusätzliche Informationen über Eigenschaften bereitgestellt wurden, werden diese Eigenschaften auf die vorgegebenen Werte festgelegt, bevor die Attributinstanz zurückgegeben wird.If additional information was provided through properties, those properties are set to the given values before the attribute instance is returned.