Правила использования атрибутов
Платформа .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 года.