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

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

Жанры

Программирование на 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

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

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

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

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

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

Друд, или Человек в черном

Симмонс Дэн
Фантастика:
социально-философская фантастика
6.80
рейтинг книги
Друд, или Человек в черном

Волхв

Земляной Андрей Борисович
3. Волшебник
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волхв

Мастер Разума VII

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

Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Агеева Елена А.
Документальная литература:
публицистика
5.40
рейтинг книги
Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Сумеречный Стрелок 5

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

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле