Поделиться через


Правила использования атрибутов

Платформа .NET Framework позволяет разработчикам вводить новые виды декларативных данных, указывать декларативные данные для различных программных сущностей и извлекать значения атрибутов в среде выполнения. Например, в среде часто определяется атрибут HelpAttribute, который может быть размещен в элементах программы, таких как классы и методы, для сопоставления элементов программы с соответствующими разделами документации. Новые виды декларативных данных определяются путем объявления классов атрибутов, которые могут иметь позиционные и именованные параметры. Дополнительные сведения об атрибутах см. в разделе Написание пользовательских атрибутов.

В представленных ниже правилах приведены рекомендации по использованию классов атрибутов.

  • Добавляйте суффикс Attribute к классам настраиваемых атрибутов, как показано в следующем примере.

    Public Class ObsoleteAttribute
    
    public class ObsoleteAttribute{}
    
  • Указывайте атрибут AttributeUsage для атрибутов с целью точного определения их использования, как показано в следующем примере.

    <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 {}
    
  • По возможности запечатывайте классы атрибутов, чтобы на их основе невозможно было создать производные классы.

  • Используйте позиционные аргументы (параметры конструктора) для обязательных параметров. Предоставляйте предназначенное только для чтения свойство с тем же именем, что и каждый позиционный аргумент, но изменяйте регистр знаков для их различения. Это позволяет осуществлять доступ к аргументу во время выполнения.

  • Используйте именованные аргументы для необязательных параметров и предоставляйте для каждого именованного аргумента свойство, предназначенное для чтения и записи.

  • Не определяйте параметр, содержащий и именованные, и позиционные аргументы. В следующем примере кода показан этот шаблон.

    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;
          }
       } 
    }
    

Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Основные понятия

Правила использования

Другие ресурсы

Руководство по разработке библиотек классов