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

Тут можно читать онлайн Алекс Jenter - Программирование на Visual C++. Архив рассылки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на Visual C++. Архив рассылки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Программирование на Visual C++. Архив рассылки - описание и краткое содержание, автор Алекс Jenter, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Программирование на Visual C++. Архив рассылки - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование на Visual C++. Архив рассылки - читать книгу онлайн бесплатно, автор Алекс Jenter
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

If MyAttribute Is Nothing Then

Console.WriteLine("Атрибут не найден.")

Else

Dim i As Integer

For i = 0 To MyAttribute.Length – 1 ' Получить поле Имя.

Console.WriteLine("Имя: {0}.", MyAttribute(i).Name)

' Получить поле Уровень.

Console.WriteLine("Уровень: {0}.", MyAttribute(i).Level)

' Получить поле Проверено.

Console.WriteLine("Проверено: {0}.", MyAttribute(i).Reviewed)

Next i

End If

End Sub

Получение списка разнотипных атрибутов

Методы GetCustomAttributeи GetCustomAttributesне могут искать атрибут во всем классе и возвращать все его экземпляры. Они просматривают только один метод или поле за раз. Поэтому, если есть класс с одним атрибутом для всех методов и нужно получить все экземпляры этого атрибута, не остается ничего делать, как передавать эти методы один за другим в качестве параметров GetCustomAttributeи GetCustomAttributes.

В следующем фрагменте кода показано, как получить все экземпляры атрибута DeveloperAttribute, определенного как на уровне класса, так и на уровне методов.

C#

using System;

using System.Reflection;

public static void GetAttribute(Type t) {

// Получить атрибут уровня класса.

DeveloperAttribute att =

(DeveloperAttribute) Attribute.GetCustomAttribute (t, typeof(DeveloperAttribute));

if (att == null)

Console.WriteLine("Класс {0} не имеет атрибута Developer.\n", t.ToString());

else {

Console.WriteLine("Атрибут Имя на уровне класса: {0}.", att.Name);

Console.WriteLine("Атрибут Уровень на уровне класса: {0}.", att.Level);

Console.WriteLine("Атрибут Проверено на уровне класса: {0}.\n", att.Reviewed);

}

// Получить атрибуты уровня методов.

// Получить все методы данного класса и поместить их

// в массив объектов System.Reflection.MemberInfo.

MemberInfo[] MyMemberInfo = t.GetMethods();

// Вывести атрибуты всех методов класса

for (int i = 0; i < MyMemberInfo.Length; i++) {

att =

(DeveloperAttribute)Attribute.GetCustomAttribute(MyMemberInfo[i], typeof (DeveloperAttribute));

if (att == null)

Console.WriteLine("Метод {0} не имеет атрибута Developer.\n" ,

MyMemberInfo[i].ToString());

else {

Console.WriteLine("Атрибут Имя на уровне метода {0}: {1}.", MyMemberInfo[i].ToString(), att.Name);

Console.WriteLine("Атрибут Уровень на уровне метода {0}: {1}.", MyMemberInfo[i].ToString(), att.Level);

Console.WriteLine("Атрибут Проверено на уровне метода {0}: {1}.\n", MyMemberInfo[i].ToString(), att.Reviewed);

}

}

}

MC++

using namespace System;

using namespace System::Reflection;

public:

static void GetAttribute(Type* t) {

// Получить атрибут уровня класса.

DeveloperAttribute* att = __try_cast(Attribute::GetCustomAttribute(t, __typeof(DeveloperAttribute)));

if (att == 0)

Console::WriteLine(S"Класс {0} не имеет атрибута Developer.\n", t->ToString());

else {

Console::WriteLine(S"Атрибут Имя на уровне класса: {0}.", att->Name);

Console::WriteLine(S"Атрибут Уровень на уровне класса: {0}.", att->Level);

Console::WriteLine(S"Атрибут Проверено на уровне класса: {0}.\n", att->Reviewed);

}

// Получить атрибуты уровня методов.

// Получить все методы данного класса и поместить их

// в массив объектов System.Reflection.MemberInfo.

MemberInfo* MyMemberInfo __gc[] = t->GetMethods();

// Вывести атрибуты всех методов класса

for (int i = 0; i < MyMemberInfo.Length; i++) {

att =

__try_cast(Attribute::GetCustomAttribute(MyMemberInfo[i], __typeof(DeveloperAttribute)));

if (att == 0)

Console::WriteLine(S"Метод {0} не имеет атрибута Developer.\n" , MyMemberInfo[i]->ToString());

else {

Console::WriteLine(S"Атрибут Имя на уровне метода {0}: {1}.", MyMemberInfo[i]->ToString(), att->Name);

Console::WriteLine(S"Атрибут Уровень на уровне метода {0}: {1}.", MyMemberInfo[i]->ToString(), att->Level);

Console::WriteLine(S"Атрибут Проверено на уровне метода {0}: {1}.\n", MyMemberInfo[i]->ToString(), att->Reviewed);

}

}

}

Visual Basic.NET

Imports System

Imports System.Reflection

Public Shared Sub GetAttribute(t As Type)

' Получить атрибут уровня класса.

Dim att As DeveloperAttribute = _

ype(Attribute.GetCustomAttribute(t, GetType(DeveloperAttribute)), DeveloperAttribute)

If att Is Nothing Then

Console.WriteLine("Класс {0} не имеет атрибута Developer.", t.ToString())

Else

Console.WriteLine("Атрибут Имя на уровне класса: {0}.", att.Name)

Console.WriteLine("Атрибут Уровень на уровне класса: {0}.", att.Level)

Console.WriteLine("Атрибут Проверено на уровне класса: {0}.", att.Reviewed)

End If

' Получить атрибуты уровня методов.

' Получить все методы данного класса и поместить их

' в массив объектов

System.Reflection.MemberInfo.

Dim MyMemberInfo As MemberInfo() = t.GetMethods()

' Вывести атрибуты всех методов класса

Dim i As Integer

For i = 0 To MyMemberInfo.Length – 1

att =

CType(Attribute.GetCustomAttribute(MyMemberInfo(i), GetType(DeveloperAttribute)), DeveloperAttribute)

If att Is Nothing Then

Console.WriteLine("Метод {0} не имеет атрибута Developer.", MyMemberInfo(i).ToString())

Else

Console.WriteLine("Атрибут Имя на уровне метода {0}: {1}.", MyMemberInfo(i).ToString(), att.Name)

Console.WriteLine("Атрибут Уровень на уровне метода {0}: {1}.", MyMemberInfo(i).ToString(), att.Level)

Console.WriteLine("Атрибут Проверено на уровне метода {0}: {1}.", MyMemberInfo(i).ToString(), att.Reviewed)

End If

Next i

End Sub

Для доступа к методам и полям проверяемого класса используются методы класса System::Type. В этом примере сначала через Typeзапрашивается информация об атрибутах, определенных на уровне класса, затем, через метод Type.GetMethodsполучается информация обо всех атрибутах, определенных на уровне методов. Эта информация помещается в массив объектов типа System.Reflection.MemberInfo. Если нужны атрибуты свойств, используется метод Type.GetProperties, а для конструкторов – Type.GetConstructors. Класс Typeимеет множество методов для доступа к элементам типа, здесь описана только очень небольшая часть.

Пример

Демонстрационная программа, показывающая, как можно получать информацию из секций метаданных, написана на C#. На рисунке показана закладка, на которой можно увидеть значения атрибутов для сборки, на других закладках показывается аналогичная информация. Я не буду подробно описывать пример, кому надо, может скачать и скомпилировать его. Пример достаточно прост и разобраться в том, как получаются атрибуты, ни для кого не составит труда.

Заключение

Как видите, система метаданных в среде .NET достаточно хорошо продумана, и пользоваться ей легко и удобно.

Это все на сегодня. Пока!

Алекс Jenter jenter@rsdn.ru Duisburg, 2001. Публикуемые в рассылке материалы принадлежат сайту RSDN.
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алекс Jenter читать все книги автора по порядку

Алекс Jenter - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Программирование на Visual C++. Архив рассылки, автор: Алекс Jenter. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x