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

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 294 295 296 297 298 299 < 300 > 301 302 303 304 305 306 .. 404 >> Следующая


BindingFlags.Public I BindingFlasfi NonPublic I BindinsFla 5.Static ))

(

- // И отыскать все исправленные ошибки и в них так: ! object[] memberFixes = member-GetCuetomAttributes (typeof (BugFixAttribute) ,

false) i

if (memberFixes .Length > 0) t

Console. WriteLine <* (0)' , member .Name) »-

- // Проход в цикле и вывод этих ошибок

foreach (BugFixAttribute nemberFix in memberFixes)

. Console.WriteLine (' (0)* , memberFix) i )

> 1

)

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

Первое, что осуществляется в данном коде,— это извлечение всех атрибутов BugFix, относящихся к самому тнпу:

objactU fixes = t.GatCugtomAttributes (cypeof (BugFixAttribute) , false);

Эти атрибуты нумеруются и выводятся. Далее программа проходит по всем описанным членам данного класса посредством использования метода GetMembersо:

foreach (Memberlnfo member in t.GetMembers (

BindingFlags,Instance I BindingFlags.Public I BindingFlags.NonPublic I BindingFlags.Static))
Атрибуты ___________________________________________________________________________________641

Метод GetMembersO позволяет извлекать свойства, методы и поля, описанные в данном типе. Для того чтобы ограничить перечень возвращаемых членов, применяется перечислимый тип BindingFlage (который описан в пространстве имен System. Ref lection).

Флажки привязки, передаваемые этому методу, позволяют указать, какие именно члены нас интересуют. В данном случае представляют интерес все переменные — как статические, так и переменные экземпляра, независимо от того, являются ли они видимыми или нет, поэтому мы задаем значения instance и static вместе со Значениями Public И NonPublic.

Получив псе интересующие нас члены, мы проходим по ним в цикле, находя все атрибуты BugFix, привязанные к данному члену, и выводим их на консоль. Для того чтобы вывести перечень исправленных ошибок для данного класса, все, что требуется,— это обратиться к статическому методу DisplayFixes!), передав ему тип класса:

BugFixAttribute.DisplayFixes (typeof (MyBuggyCode))'

Для класса MyBuggyCode, приведенного ранее, это позволит получить следующий выходной поток:

Displaying fixes for MyBuggyCode /Вывод исправлений для класса MyBuggyCode/ BugFix 101 : Created some methods /Создание некоторых методов/

DoSomething

BugFix 2112 : Returned a non null string /Возврат ненулевой строки/

BugFix 38382 : Returned OK /Возврат ОК/

.ctor

BugFix 90125 : Removed call to base() /Удаление обращения к базе данных/

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

Свойство AttributeUsage.Inheriied

Любой атрибут можно объявить как наследуемый, присвоив этому флажку значение true при определении нестандартного атрибута:

[Attributeusage (AttributeTargets.Class,

Inherit *d m txu«) ]

public class BugFixAttribute : f.. -)

Это позволяет обозначить тот факт, что атрибут BugFix будет наследоваться всеми подклассами класса, в котором он используется, что, на самом деле, может быть в одних случаях желательно, а в других — нет. Для атрибута BugFix такое поведение, скорее всего, будет нежелательным, поскольку исправленная ошибка обычно относится только к самому классу, а не к производным от него классам.

' Предположим, что имеется следующий абстрактный класс, к которому применяется данный атрибут:

[BugFix(*38383*,'Made the class abstract*)]

public'abstract class GenericRow : DataRow

(

public GenericRow [System.Data.DataRowBuilder builder)

; base (builder)

(

1 .

)
642

Глава 22

Если мы создадим подкласс данного класса, то, скорее всего, не захотим, чтобы тот же самый атрибут BugFix был отражен в этом подклассе, поскольку такая ошибка в этом подклассе не исправлялась. Однако если бы мы описывали семейство атрибутов, которые привязывают члены класса к полям таблицы в базе данных, то в этом случае, возможно, потребовалось бы наследование этих атрибутов. Чрезвычайно распространенной является практика, когда при описании схемы базы данных используется набор стандартных столбцов, который входит в состав большинства таблиц, таких, например, как Name (имя) или Description (описание). Можно использовать эти поля при кодировании базового класса, а затем включить в него нестандартный атрибут, который привяжет свойство, описанное в классе, к соответствующему столбцу в базе данных. В других подклассах при необходимости могут использоваться дополнительные поля.

В следующем примере мы создадим атрибуты DatabaseTable И DatabtiaeColujnn, которые могут быть применены для класса таким образом, чтобы стало возможно автоматическое создание таблицы базы данных, пригодной для хранения данного класса.

Практикум: создание таблиц баз данных с использованием атрибутов

Последний пример данной главы позволит продемонстрировать, каким образом атрибуты могут быть использованы в классах .NET для создания схемы базы данных — структуры базы данных, состоящей нз таблиц, столбцов и типон данных, которая позволила бы объектам .NET создавать свои собственные таблицы базы данных, где могли бы храниться эти объекты. Мы познакомимся с тем, как извлекать информацию об этой схеме для создания SQL-запроса, позволяющего создавать таблицы в базе данных, а также создавать объекты DataTabie, хранящиеся в памяти.
Предыдущая << 1 .. 294 295 296 297 298 299 < 300 > 301 302 303 304 305 306 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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