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

С# - Ватсон К.

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


? type — атрибут применим к классу, интерфейсу или структуре.

Большинство из этих значений используются очень редко, поскольку область действия обычно определяется однозначно. Одиако значения assembly, module и return часто приходится использовать для определения области действия. Если есть какая-либо неоднозначность, к чему относится данный атрибут, то компилятор самостоятельно выбирает тот объект, к которому этот атрибут будет приписан. Наиболее распространенным случаем является использование атрибута для возвращаемого значения функции, как показано ниже: •

[SomeAttribute]

public string DoSomething (I;

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

[returniSomeAttribute]

public string DoSomething () ;

Атрибут AttributeUsage.AllowMultiple

С помощью этого атрибута мы определяем, может ли пользователь включать один или несколько одинаковых атрибутов в некоторый элемент. Например, можно создать атрибут, в котором будет храниться перечень всех исправленных ошибок, применимый к некоторому участку кода. Прн создании модуля может появиться необходимость включить в него подробное описание нескольких обнаруженных ошибок.

Атрибут BugFixAttribute

В приведенном ниже коде определяется простой атрибут BugFixAttribute и используется флажок AllowMultiple с тем, чтобы данный атрибут мог быть использован более одного раза для некоторого участка кода:

[Attributeueage (AttributeTargets.Class I AttributeTargets.Property I

AttributeTargets.Method | AttributeTargets.Constructor , AlloWHultipi*-true) ] public class BugFixAttribute : Attribute

I

public BugFixAttribute (string bugNumber t string comments)

(
Атрибуты

639

. BugNunber ¦ bugNumber; .Coanenta * comments)

public readonly * taring SugHumber public readonly string Comments ;

Конструктор атрибута BugFix принимает номер ошибки и строку комментария, при этом он помечен флажком AiiowMuitipie=true, откуда следует, что он может быть использован, например, таким образом:

[Bugrix("101*,'Created som Mtbods*)] public class MyBugsryCode {

[BugF:L*(*9012S*,»Ree©Y*d eall to Ьш!)')]

public MyBuegyCode ()

[BuffFl-xf*ail2a,'Betuxn*d a not mill etslnf)I" [BugFix {*:382¦.'Returned OK*)I . ' : '

public string DoSomethina О "

( ' ¦ . return 'OK* i

>

Синтаксис, использованный для присваивания значения флажку AllowMultiple, имеет несколько странный вид. Конструктор атрибута Attributeusage принимает только одни параметр — перечень флажков, определяющих область применения данного атрибута. AllowMultiple является свойством атрибута Attributeusage, следовательно приведенный ниже синтаксис означает “создан атрибут, а затем присвой его свойству AllowMultiple значение true”:

[Attributeusage (AttributeTargets.Class 1 AttributeTargets.Property I

AttributeTargets.Method 1 AttributeTftxgeta.Constructor ,

. AllowMultiple=true)}

public class BugFixAttribute : Attribute {

Схожий метод используется и для свойства inherited, которое обсуждается ниже в настоящей главе. Еслн нестандартный атрибут обладает какими-либо свойствами, то нм можно присваивать значения аналогичным способом. Примером может служить добавление фамилии человека, исправившего данную ошибку:

public readonly string BugNumber;

public readonly string Comments;

public string Author * null;

public override string ToString [)

(

)

>
640 Глава 22

В результате этого мы добавляем свойство Author (автор) и переопределенную реализацию метода Tostringo, которая позволяет выводить подробную информацию об ошибке, если свойству Author присвоено какое-либо значение, и только номер ошибки н комментарии к ней в противном случае. Метод Tostringo может быть использован для вывода перечня исправленных ошибок для данного участка кода — например, распечатан и сохранен в файле.

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

Этот способ заключается в передаче типа класса (снова System.туре) функции DispiayFixes, приведенной ннже. В иен также используется отражение для поиска всех исправленных ошибок для данного класса, а затем эта функция проходит по всем методам этого класса в поисках атрибутов исправленных ошибок.

Этот пример может быть найден в директории Chapter22/BugFix:

public static void DispiayFixes (System.Type t) f

11 Получение всех исправленных ошибок для данного типа!

//в данном случае предполагается что это класс

object[] fixes » t.GetCustomAttributes (typeof (BugFixAttribute) , false);

Console.WriteLine ('Displaying fi es for (О)' , с) i -

// Вывод информации об исправленной ошибке ’

foreach (BugFixAttribute bugFix in fixes)

Console.WriteLine (' (OJ* , bugFix)i

// Теперь требуется получить все члены (т. е. функции) данного класса foreach (Heniberlnfо member in t.GetMembers (BindingFlags. Instance I
Предыдущая << 1 .. 293 294 295 296 297 298 < 299 > 300 301 302 303 304 305 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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