Чтение онлайн

на главную - закладки

Жанры

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

Теперь можно приступить к определению самого класса. Это определение выглядит подобно определению обычного класса, что демонстрирует следующий пример:

C#

// Этот атрибут может применяться только к методам

public class MyAttribute : System.Attribute {

 // …

}

MC++

// Этот атрибут может применяться только к методам

public gc class MyAttribute : System.Attribute {

 // …

}

Visual Basic.NET

'
Этот атрибут может применяться только к методам

Public Class <AttributeUsage(AttributeTargets.Method)> MyAttribute

 Inherits System.Attribute

 ' …

End Class

Этот пример показывает следующие положения:

• Атрибутивные классы должны объявляться как открытые

• По соглашению, имена классов должны заканчиваться словом Attribute. Хотя это и необязательно, рекомендуется поступать так для улучшения читаемости текста. При использовании атрибута это слово необязательно.

• Все атрибутивные классы должны, так или иначе, наследовать от System.Attribute.

• В Microsoft Visual Basic все пользовательские атрибутивные классы должны иметь атрибут AttributeUsageAttribute.

Определение конструкторов

Атрибуты инициализируются конструкторами, так же как обычные классы. Следующий фрагмент кода иллюстрирует типичный конструктор атрибута. Этот открытый конструктор принимает один параметр и инициализирует переменную класса.

C#

public MyAttribute(bool myvalue) {

 this.myvalue = myvalue;

}

MC++

public:

 MyAttribute(bool myvalue) {

this->myvalue = myvalue;

 }

Visual Basic.NET

Public Sub New(newvalue As Boolean)

 Me.myvalue = newvalue

End Sub

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

Следующий пример показывает примеры использования параметризованного конструктора для инициализации атрибута. Здесь предполагается, что атрибут имеет обязательный параметр типа Boolean и необязательный типа String.

C#

// Один обязательный (позиционный) и один

// необязательный (именованный) параметры.

[MyAttribute(false, OptionalParameter = "дополнительные данные")]

// Один обязательный (позиционный) параметр.

[MyAttribute(false)]

MC++

//
Один обязательный (позиционный) и один необязательный

//(именованный) параметры.

[MyAttribute(false, OptionalParameter = S"дополнительные данные")]

// Один обязательный (позиционный) параметр.

[MyAttribute(false)]

Visual Basic.NET

' Один обязательный (позиционный) и один необязательный

'(именованный) параметры.

<MyAttribute(False, OptionalParameter := "дополнительные данные")>

' …

' Один обязательный (позиционный) параметр.

<MyAttribute(False)>

Параметры, определенные как свойства, могут передаваться в произвольном порядке. Но обязательные параметры должны передаваться в том порядке, в котором они описаны в конструкторе. Следующий фрагмент кода показывает, как необязательный параметр может передаваться перед обязательным.

C#

// Именованный параметр помещается перед позиционным.

[MyAttribute(OptionalParameter = "дополнительные данные", false)]

MC++

// Именованный параметр помещается перед позиционным.

[MyAttribute(OptionalParameter = S"дополнительные данные", false)]

Visual Basic.NET

' Именованный параметр помещается перед позиционным.

<MyAttribute(OptionalParameter := "дополнительные данные" , False)>

Определение свойств

Свойства определяются, если нужно передавать именованные параметры в конструкторы или легко и удобно получать значения полей атрибута. Следующий пример показывает, как реализовать простое свойство для пользовательского атрибута:

C#

public bool MyProperty {

 get {

return this.myvalue;

 }

 set {

this.myvalue = value;

 }

}

MC++

public:

 __property bool get_MyProperty { return myvalue; }

 __property void set_MyProperty(bool value) { myvalue = value; }

protected:

 bool myvalue;

}

Visual Basic.NET

Public Property MyProperty As Boolean

 Get

Return Me.myvalue

 End Get

Поделиться:
Популярные книги

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Я Гордый Часть 3

Машуков Тимур
3. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый Часть 3

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Ружемант

Лисицин Евгений
1. Ружемант
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Ружемант

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII

На обочине 40 плюс. Кляча не для принца

Трофимова Любовь
Проза:
современная проза
5.00
рейтинг книги
На обочине 40 плюс. Кляча не для принца

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4