Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 289

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 283 284 285 286 287 288 < 289 > 290 291 292 293 294 295 .. 404 >> Следующая


Кроме простых атрибутов, задающих информацию модуля, в .NET Framework описано около двухсот атрибутов, которые используются в самых разнообразных ситуациях — при отладке, при разработке способов временного контроля, преобразовании в последовательную-форму и для многого другого. Мы познакомимся с некоторыми стандартными атрибутами после раздела, посвященного отражению, а затем перейдем к рассмотрению вопроса о том, каким образом программист может расширить возможности .NET с помощью собственных атрибутов.
Атрибуты

617

Отражение

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

Отражение позволяет осуществлять просмотр модуля программным путем н получать о нем всю информацию, включая информацию о всех типах объектов, которые в нем содержатся. В этой информации содержатся также и все атрибуты, которые вы добавили к этим типам. Объекты отражения хранятся внутри пространства имен System. Reflection.

Помимо получения информации о типах, описанных внутри модуля, у программиста имеется возможность генерировать свои собственные модули и типы с помощью пространства имен system.Reflection.Emit. Эта тема кажется не совсем подходящей для введения в С#, но если вас она заинтересует, то некоторую информацию по вопросу создания динамических модулей вы сможете найтн в MSDN.

Практикум: поиск атрибутов

Первый пример данного раздела будет посвящен просмотру модуля и выводу перечня всех атрибутов, определенных внутри данного модуля; в результате будет получен список, аналогичный приведенному ранее. Код примеров, использованных в данном разделе, можно загрузить с web-сайта Wrox Press, он располагается в директории chaptег22/FindAttributes. Ниже полностью воспроизведен исходный файл:

//FindArtributes.cs .

// Импортирование типов из System я System.Reflection

using System;

using System.Reflection;

III «summary»

III Предназначается для раздела главы 22, которая называется отражение /// </вшвпагу> public Class FindAttributes

<

III <summary>

III Основная точка входа а выполняемый файл . exe III «/summary?

III <param name-*args*>Аргументы командной строки — должны

III представлять собой модуяь</рагат>

static void Main(string[] args) '

{

// Вывод (при необходимости) информации, каеавжейся // использования программы if (args.Length =“ 0)

Usage () ;

else if ((arga.Length == 1) (args[0] ==* */?*)>

Usage () ; else {

// Загрузка модуля string assemblyName = null ;

II Цикл просмотра аргументов) передаваемых консольному приложении,

// Просмотр аргументов осуществляемся с предположением,

// что приложению передается полное имя пути, включавшее пробелы //и представ лявцее собой несколько раэш ргументов — из них / / просто снова составляется единое имя файла...
6IS Глава 22

foreach (string arg in args)

{

if (assemblyNaiae " null) eseesoblyNMie = erg j else

assepiblyNajpe - string.Format ['(0) 11)* . assemblyName , arg);

)

try

?

II Попытка загрузить модуль с данным именем Assembly а - Assembly.Loads?rom (assemblyName) ;

П Теперь осуществляется поиск атрибутов модуля //В данном случае параметр игнорируется, поэтому // он произвольно задан к ах true

object!] attributes - a.GetCustcmAttributes(tme);

// Если удалось обнаружить описания каких-либо атрибутов. .. if (attributes.Length > 0)

<

Console,WriteLine ('Assembly attributes for ’(О}'...' , assemblyName];

I! то следует вывести их... foreach (object о in attributes)

Console,WriteLine (' (0)' , o.ToStrinfl (1);

)

else

Console.WriteLine ('Assembly (0) contains no Attributes.' , assemblyName) ;

)

catch (Exception ex)

(

Console.WriteLine ('Exception thrown loading assembly (0)...*, assemblyName);

Console.WriteLine ();

Console.WriteLine (ex.ToString ())j

)

)

)

III <summary>

III Вывод полезной информации для ,exe III </suтмгу> static void Usage ()

(

Console .WriteLine (‘Usage: *H

Console.WriteLine (* FindAttributes <АваешЫу>')

)

Как это работает

В программе сначала производится проверка наличия параметров, переданных через командную строку, если таковые отсутствуют нлн пользователь ввел сроку 'FindAttributes /?', то происходит вызов метода usage, который выводит простое сообщение об использовании данной команды;

if (args.Length -- 0)

Usage () ;

else if ( (args.Length -- 1) && (args[01 -- '/?'))

Usage ();
Атрибуты

619

Далее происходит объединение аргументов командной строки в единую строку. Это необходимо выполнить, поскольку пробелы в названиях директорий весьма распространены, например, 'Program Files', а эго приводит к тому, что такой текст из-за пробела воспринимается как два разных параметра, Поэтому все аргументы просматриваются в цикле и преобразуются в одну строку', которая используется в качестве имени модуля, подлежащего загрузке:
Предыдущая << 1 .. 283 284 285 286 287 288 < 289 > 290 291 292 293 294 295 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.