- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Программирование на Visual C++. Архив рассылки - Алекс Jenter
Шрифт:
Интервал:
Закладка:
MC++
public gc class MyClass {
public:
// В MC++ несколько атрибутов могут определяться в разных блоках,
// ограниченных скобками или в одном блоке – через запятую.
// Порядок следования атрибутов неважен.
[MyAttribute][YourAttribute]
void MyMethod() {
//…
}
}
Visual Basic.NET
' В Microsoft Visual Basic.NET несколько атрибутов разделяются запятыми.
' Порядок следования атрибутов неважен.
Public Class MyClass
Public Sub <MyAttribute, YourAttribute> 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 _
<AttributeUsage(AttributeTargets.Method)> MyAttribute
Inherits Attribute
End Class
Public Class _
<AttributeUsage(AttributeTargets.Method, AllowMultiple := True)> 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 <MyAttribute, MyAttribute> MyMethod()
'…
End Sub
' Это допустимо.
Public Sub <YourAttribute, YourAttribute> 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 <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;