Richtlinien für die Verwendung von Attributen

.NET Framework ermöglicht es Entwicklern, neue Arten von deklarativen Informationen zu erfinden, Deklarationen für verschiedene Programmeinheiten anzugeben und Attributinformationen in einer Laufzeitumgebung abzurufen. Beispielsweise kann ein Framework ein HelpAttribute-Attribut definieren, das in Programmelementen, z. B. Klassen und Methoden, eingefügt werden kann, um eine Zuordnung von Programmelementen zu ihrer Dokumentation bereitzustellen. Neue Arten von deklarativen Informationen werden über die Deklaration von Attributklassen definiert, die Positions- und benannte Parameter aufweisen können. Weitere Informationen zu Attributen finden Sie unter Verfassen von benutzerdefinierten Attributen.

Die folgenden Regeln dienen als Richtlinie für die Verwendung von Attributklassen:

  • Fügen Sie benutzerdefinierten Attributklassen das Attribute-Suffix hinzu, wie im folgenden Beispiel gezeigt.

    Public Class ObsoleteAttribute{}
    
    public class ObsoleteAttribute{}
    
  • Geben Sie AttributeUsage für die Attribute an, um die Verwendung der Attribute exakt zu definieren, wie im folgenden Beispiel gezeigt.

    <AttributeUsage(AttributeTargets.All, Inherited := False, AllowMultiple := True)>  _
    
    Public Class ObsoleteAttribute
       Inherits Attribute
       ' Insert code here.
    End Class
    
    [AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
    public class ObsoleteAttribute: Attribute {}
    
  • Versiegeln Sie Attribute, wann immer möglich, sodass keine Klassen aus ihnen abgeleitet werden können.

  • Verwenden Sie Positionsargumente (Konstruktorparameter) für erforderliche Parameter. Stellen Sie für jedes Positionsargument eine gleichnamige schreibgeschützte Eigenschaft bereit, wobei Sie die Groß-/Kleinschreibung ändern, um eine Unterscheidung zu ermöglichen. Dadurch kann zur Laufzeit auf das Argument zugegriffen werden.

  • Verwenden Sie benannte Argumente (Lese-/Schreibeigenschaften) für optionale Parameter. Stellen Sie für jedes benannte Argument eine gleichnamige Eigenschaft mit Lese‑/Schreibzugriff bereit, wobei Sie die Groß-/Kleinschreibung ändern, um eine Unterscheidung zu ermöglichen.

  • Definieren Sie einen Parameter nicht mit benannten und Positionsargumenten. Das folgende Codebeispiel veranschaulicht dieses Schema.

    Public Class NameAttribute
       Inherits Attribute
       Private userNameValue as String
       Private ageValue as Integer
    
       ' This is a positional argument.
       Public Sub New(userName As String) 
          userNameValue = userName
       End Sub
    
       Public ReadOnly Property UserName() As String
          Get
             Return userNameValue 
          End Get
       End Property
    
       ' This is a named argument.
       Public Property Age() As Integer
          Get
             Return ageValue 
          End Get
          Set
             ageValue = value
          End Set 
       End Property
    End Class
    
    public class NameAttribute: Attribute 
    {
       string userName;
       int age;
    
       // This is a positional argument.
       public NameAttribute (string userName) 
       { 
           this.userName = userName;
       }
       public string UserName 
       { 
          get 
          {
             return userName; 
          }
       }
       // This is a named argument.
       public int Age 
       { 
          get 
          {
             return age;
          }
          set 
          {
             age = value;
          }
       } 
    }
    

Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.

Weitere Informationen zu Entwurfsrichtlinien finden Sie im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.

Siehe auch

Konzepte

Verwendungsrichtlinien

Weitere Ressourcen

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken