Параметры атрибутов

Позиционные и именованные параметры

Классы-атрибуты могут иметь позиционные и именованные параметры. Каждый открытый экземплярный конструктор класса определяет допустимую последовательность позиционных параметров для данного класса-атрибута. Каждое открытое экземплярное свойство доступное для чтения-записи определяет именованный параметр для данного класса-атрибута.

Значения позиционных параметров указываются в том порядке, в каком они определены в соответствующем конструкторе. Позиционные параметры являются обязательными.

Значения именованных параметров указываются в виде комбинации <Наименование параметра> := <значение>. Именованные параметры указываются после всех позиционных и являются не обязательными.

Типы параметров атрибутов

Типы параметров классов-атрибутов ограничены следующими возможными типами параметров атрибутов:

Пример

Ниже приведен пример определения пользовательского класса-атрибута. Для атрибута указываются два параметра. Значения параметров хранятся в свойствах Status и AdditionalValue. В классе TestAttribute для методов задан пользовательский атрибут с различными значениями параметров.

Public Enum UserStatus
    None, User, Admin, ISA
End Enum UserStatus;

//Класс-атрибут
Public
 Class UserAttribute: System.Attribute
    User: UserStatus;
    s: String;

    Public Constructor UserAttribute(Status: UserStatus);
    Begin
        User := Status;
    End Constructor;

    Public Property Status: UserStatus
        Get
        Begin
            Return User
        End Get
        Set
        Begin
            User := Status;
        End Set
    End Property;

    Public Property AdditionalValue: String
        Get
        Begin
            Return s
        End Get
        Set
        Begin
            s := Value;
        End Set
    End Property;
End Class UserAttribute;

Public Class TestAttribute

    //Атрибут с позиционным параметром
    [User(UserStatus.User)]
    Public Sub UserMethod();
    Begin
        
    End Sub;

    //Атрибут с позиционным и именованным параметром
    [User(UserStatus.Admin, AdditionalValue := "1")]
    Public Sub AdminMethod();
    Begin
        
    End Sub;

    [User(UserStatus.ISA, AdditionalValue := "2")]
    Public Sub ISAMethod();
    Begin
        
    End Sub;

End Class;

См.также:

Атрибуты