Отладка и тестирование приложений в среде Visual Studio 2005. Евсеева О.Н - 12 стр.

UptoLike

Составители: 

12
Хотелось бы иметь легкий механизм управления отладочными методами,
позволяющий включать при необходимости те или иные инструменты. Для это-
го можно воспользоваться механизмом условной компиляции, встроенным в
язык C#. Этот механизм состоит из двух частей. К проекту, точнее, к конфигу-
рации проекта, можно добавить специальные константы условной компиляции.
Вызов отладочного метода может быть сделан условным. Если соответствую-
щая константа компиляции определена, то происходит компиляция вызова ме-
тода и он будет вызываться при выполнении проекта. Если же константа не оп-
ределена (выключена), то вызов метода даже не будет компилироваться и ника-
ких динамических провероквызывать метод или нетделаться не будет.
Как задавать константы компиляции? Напомним, что проекты C# в Visual
Studio существуют в нескольких конфигурациях. В ходе работы с проектом
можно легко переключаться с одной конфигурации на другую, после чего она
становится активной, можно изменять настройки конфигурации, можно создать
собственные конфигурации проекта. По умолчанию проект создается в двух
конфигурациях – Debug и Release, первая из которых предназначена для отлад-
ки, втораядля окончательных вычислений. Первая не предполагает оптими-
зации и в ней определены две константы условной компиляции – DEBUG и
TRACE, во второйопределена только константа TRACE. Отладочная версия
может содержать вызовы, зависящие от константы DEBUG, которые будут от-
сутствовать в финальной версии. Используя страницу свойств, к конфигурации
проекта можно добавлять новые константы компиляции.
Можно также задавать константы условной компиляции в начале модуля
проекта вперемешку с предложениями using. Предложение define позволяет оп-
ределить новую константу: #define COMPLEX
Как используются константы условной компиляции? В языке С++, где
имеется подобный механизм, определен специальный препроцессорный
IF-оператор, анализирующий, задана константа или нет. В языке C# использу-
ется вместо этого гораздо более мощный механизм. Как известно, методы C#
обладают набором атрибутов, придающих методу разные свойства. Среди
встроенных атрибутов языка есть атрибут Conditional, аргументом которого яв-
ляется строка, задающая имя константы:
[Conditional ("COMPLEX")] public void ComplexMethod () {...}
Если константа условной компиляции COMPLEX определена для актив-
ной конфигурации проекта, то произойдет компиляция вызова метода
ComplexMethod, когда он встретится в тексте программы. Если же такая кон-
станта отсутствует в конфигурации, то вызов метода игнорируется.
На методы, для которых возможно задание атрибута Conditional, наклады-
вается ряд ограничений. Метод не должен быть:
функцией, возвращающей значение;
методом интерфейса;