void MyMethod() {
//…
}
}
Visual Basic.NET
' В Microsoft Visual Basic.NET несколько атрибутов разделяются запятыми.
' Порядок следования атрибутов неважен.
Public Class MyClass
Public Sub MyMethod()
'…
End Sub
End Class
И, наконец, рассмотрим класс YourClass– наследник MyClass. С методом MyMethodэтого класса будет связан только атрибут MyAttribute.
C#
public class YourClass : MyClass {
// Этот метод имеет только атрибут MyAttribute.
public void MyMethod() {
//…
}
}
MC++
public gc class YourClass : public MyClass {
public:
// Этот метод имеет только атрибут MyAttribute.
void MyMethod() {
//…
}
}
Visual Basic.NET
Public Class YourClass
Inherits MyClass
' Этот метод имеет только атрибут MyAttribute.
Public Sub MyMethod()
'…
End Sub
End Class
Свойство AllowMultiple
Это свойство показывает, может ли атрибут применяться многократно к одному элементу. По умолчанию оно равно false, что значит – атрибут может использоваться только один раз. Рассмотрим следующий пример:
C#
// По умолчанию AllowMultiple = false.
public class MyAttribute : Attribute {}
[AttributeUsage(AllowMultiple = true)]
public class YourAttribute : Attribute {}
MC++
// По умолчанию AllowMultiple = false.
public gc class MyAttribute : public System::Attribute {}
[AttributeUsage(AllowMultiple = true)]
public gc class YourAttribute : public System::Attribute {}
Visual Basic.NET
' По умолчанию AllowMultiple = false.
Public Class _
MyAttribute
Inherits Attribute
End Class
Public Class _
YourAttribute
Inherits Attribute
End Class
Если используется несколько экземпляров атрибутов, MyAttributeзаставляет компилятор выдать сообщение об ошибке. Следующий фрагмент кода иллюстрирует правильное использование атрибута YourAttributeи неправильное – MyAttribute:
C#
public class MyClass {
// Ошибка – дублирование не разрешено.
[MyAttribute, MyAttribute]
public void MyMethod() {
//…
}
// Это допустимо.
[YourAttribute, YourAttribute] public void YourMethod() {
//…
}
}
MC++
public gc class MyClass {
public:
// Ошибка – дублирование не разрешено.
[MyAttribute, MyAttribute] void MyMethod() {
//…
}
// Это допустимо.
[YourAttribute, YourAttribute] void YourMethod() {
//…
}
}
Visual Basic.NET
Public Class MyClass
' Ошибка – дублирование не разрешено.
Public Sub MyMethod()
'…
End Sub
' Это допустимо.
Public Sub YourMethod()
'…
End Sub
End Class
Если свойства AllowMultipleи Inheritedустановлены в true, класс может наследовать атрибут и иметь еще экземпляры, примененные непосредственно к нему. Если же свойство AllowMultipleравно false, значения атрибутов родительского класса будут переписаны значениями этого же атрибута класса-наследника.
Типы данных, допустимые в атрибутах
Атрибут может содержать поля следующих типов:
• Bool
• Byte
• Char
• Double
• Float
• Int
• Long
• Short
• String
• Object
• System.Type
Открытые перечислимые типы, вложенные (если вложены) в открытые типы
Попытка использовать в классе, реализующем атрибут другие типы, приводит к ошибкам компиляции.
Определение атрибутивного класса
Теперь можно приступить к определению самого класса. Это определение выглядит подобно определению обычного класса, что демонстрирует следующий пример:
C#
// Этот атрибут может применяться только к методам
public class MyAttribute : System.Attribute {
// …
}
MC++
// Этот атрибут может применяться только к методам
public gc class MyAttribute : System.Attribute {
// …
}
Visual Basic.NET
' Этот атрибут может применяться только к методам
Public Class MyAttribute
Inherits System.Attribute
' …
End Class
Этот пример показывает следующие положения:
• Атрибутивные классы должны объявляться как открытые
• По соглашению, имена классов должны заканчиваться словом Attribute. Хотя это и необязательно, рекомендуется поступать так для улучшения читаемости текста. При использовании атрибута это слово необязательно.
• Все атрибутивные классы должны, так или иначе, наследовать от System.Attribute.
Читать дальше