Anwendung von Attributen

Aktualisiert: November 2007

Sie wenden Attribute an, indem Sie Programmelementen, wie Eigenschaften, Methoden, Ereignissen, Klassen und Assemblys, Attributblöcke hinzufügen. Ein Attributblock besteht aus spitzen Klammern ("< >"), die eine Liste durch Trennzeichen getrennter Attributdeklarationen umschließen. Eine Attributdeklaration besteht aus einem optionalen Attributmodifizierer, z. B. Module oder Assembly, einem Attributnamen, einer (möglicherweise überladenen) Liste erforderlicher Positionsparameter und einer Liste benannter optionaler Argumente. Sie müssen Attribute mit Modifizierern in einen Attributabschnitt am Anfang einer Quelldatei stellen. Im folgenden Beispiel wird z. B. ein Assemblyattribut festgelegt, das einen Titel für die Assembly definiert, sowie ein Modulattribut, das angibt, dass das Modul CLS (Common Language Specification)-kompatibel ist:

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)> 

Assemblyattribute können auch mithilfe der Datei AssemblyInfo.vb angewendet werden, die von der Visual Studio-Benutzeroberfläche Projekten automatisch hinzugefügt wird. Diese Datei enthält Attribute auf Assemblyebene, die entweder Standardwerte oder keine Werte aufweisen.

Beim Anwenden auf Programmelemente, wie z. B. Eigenschaften, stehen Attribute vor dem Element. Durch den folgenden Code wird beispielsweise ein Attribut auf eine Klassendefinition angewendet:

<CustomAttr(Update:=True)> Class Class1

Gemäß Konvention enden Attributnamen mit dem Wort "Attribute", damit sie von anderen Elementen in .NET Framework zu unterscheiden sind. Das Attributsuffix muss bei Verwendung von Attributen jedoch nicht angegeben werden. Bei einem Attribut mit dem Namen CustomAttrAttribute ist die Zeichenfolge <CustomAttr(Update:=True)> gleichwertig mit der Zeichenfolge <CustomAttrAttribute(Update:=True)>.

Attributargumente

Attribute verwenden optionale, erforderliche, positionelle und benannte Argumente in nahezu derselben Weise, wie diese Argumenttypen von Objekten verwendet werden. Positionsargumente werden in der Reihenfolge angegeben, in der sie für den Konstruktor eines Attributs deklariert wurden. Durch den folgenden Code wird beispielsweise der Sub New-Konstruktor eines Attributs mit zwei Werten aufgerufen:

<CustomAttr(True, False)> Class Class1

Argumente, die in Attributklassen an Sub New übergeben werden, werden häufig verwendet, um die Werte von Feldern und Eigenschaften zu initialisieren.

Mithilfe von benannten Argumenten kann der Wert von Eigenschaften und Feldern direkt festgelegt werden. Sie geben ein benanntes Argument an, indem Sie ":=", gefolgt vom festzulegenden Wert, an den Namen des Arguments anfügen. Benannte Argumente können im Gegensatz zu Positionsargumenten in einer beliebigen Reihenfolge festgelegt werden. Beispielsweise wird mit dem folgenden Code dem Feld Update der Wert True und dem Feld Keep der Wert False zugewiesen.

<CustomAttr(Update:=True, Keep:=False)> Class Class1
Hinweis:

Attributargumente weisen einen wichtigen Unterschied gegenüber den Argumenten auf, die in Standardmethodenaufrufen verwendet werden. Sie müssen für Argumente, die mit dem Sub New-Konstruktor von Attributklassen verwendet werden, Positionsargumente eingeben. Benannte Argumente können nur zum Festlegen der Werte von Feldern und der Eigenschaften von Attributklassen verwendet werden.

Bei erforderlichen Argumenten handelt es sich um Argumente, die immer festgelegt werden müssen. Optionale Argumente können bei Verwendung von Positionsargumenten übergangen werden, indem ein Komma als Platzhalter verwendet wird, bzw. bei Verwendung benannter Argumente einfach weggelassen werden.

Attributargumente müssen konstante Ausdrücke sein.

Beispiele für Attribute

Die folgenden Prozeduren bieten Beispiele für Attributdeklarationen.

So verwenden Sie das MarshalAs-Attribute, um das Marshallen von Parametern zu steuern

  1. Fügen Sie eine Imports-Anweisung für den System.Runtime.InteropServices-Namespace am Anfang des Quellcodes ein:

    Imports System.Runtime.InteropServices
    
  2. Stellen Sie den Parametern das MarshalAsAttribute-Attribut voran, und legen Sie den vom Ziel benötigten Datentyp fest. Durch den folgenden Code werden beispielsweise zwei Parameter als Datentyp LPStr (Long Pointer to String) für eine Windows-API-Funktion gemarshallt:

    Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _
       ByVal failifexists As Boolean _
    )
    

Die Common Language Runtime verwendet das MarshalAsAttribute-Attribut, um festzustellen, wie ein Parameter zwischen dem verwalteten Code von Visual Basic und dem nicht verwalteten Code in einem Windows-API-Aufruf gemarshallt werden soll.

So legen Sie eine Methode für Remotewebclients offen

  1. Klicken Sie im Menü Datei auf Projekt, wählen Sie die Vorlage ASP.NET-Webdienst aus, und fügen Sie eine Imports-Anweisung für den System.Web-Namespace hinzu:

    Imports System.Web.Services
    
  2. Definieren Sie eine Methode, und verwenden Sie das WebMethodAttribute-Attribut, damit die Methode durch Remotewebclients aufgerufen werden kann:

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

Es reicht nicht aus, die Methode eines XML-Webdienstes als Public zu deklarieren, um sie Webclients zur Verfügung zu stellen. Bevor eine Methode von einem Remotewebclient aufgerufen werden kann, muss das WebMethodAttribute-Attribut explizit auf die Methode angewendet werden.

Siehe auch

Aufgaben

Gewusst wie: Definieren eigener Attribute

Konzepte

Übersicht über Attribute in Visual Basic

Allgemeine Verwendungszwecke für Attribute

Argumentübergabe nach Position und Namen

Referenz

WebMethodAttribute

Imports-Anweisung (.NET-Namespace und Typ)

MarshalAsAttribute

System.Web

Weitere Ressourcen

Benutzerdefinierte Attribute in Visual Basic