Вход/Регистрация
C# 4.0 полное руководство - 2011
вернуться

Шилдт Герберт

Шрифт:

#define TRIAL

using System;

using System.Diagnostics;

class Test {

[Conditional("TRIAL")] void Trial {

Console.WriteLine("Пробная версия, не " +

"предназначенная для распространения.");

[Conditional("RELEASE")] void Release {

Console.WriteLine("Окончательная рабочая версия.");

}

static void Main {

Test t = new Test;

t.Trial; //вызывается только в том случае, если // определен идентификатор TRIAL t.ReleaseO; // вызывается только в том случае, если // определен идентификатор RELEASE

}

}

Эта программа дает следующий результат.

Пробная версия, не предназначенная для распространения.

Рассмотрим эту программу подробнее, чтобы стал понятнее результат ее выполнения. Прежде всего обратите внимание на то, что в этой программе определяется идентификатор TRIAL. Затем обратите внимание на определение методов Trial и Release . Каждому из них предшествует атрибут Conditional, общая форма которого приведена ниже:

[Conditional идентификатор]

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

Оба метода, Trial nRelease, вызываются в методе Main . Но поскольку определен один лишь идентификатор TRIAL, то выполняется только метод Trial , тогда как метод Release игнорируется. Если же определить идентификатор RELEASE, то метод Release будет также выполняться. А если удалить определение идентификатора TRIAL, то метод Trial выполняться не будет.

Атрибут Conditional можно также применить в классе атрибута, т.е. в классе, наследующем от класса Attribute. Так, если идентификатор определен, то атрибут применяется, когда он встречается в ходе компиляции. В противном случае он не применяется.

На условные методы накладывается ряд ограничений. Во-первых, они должны возвращать значение типа void, а по существу, ничего не возвращать. Во-вторых, они должны быть членами класса или структуры, а не интерфейса. И в-третьих, они не могут предшествовать ключевому слову override.

Атрибут Obsolete

Атрибут Obsolete (сокращенное наименование класса System. Obso-leteAttribute) позволяет пометить элемент программы как устаревший. Ниже приведена общая форма этого атрибута:

[Obsolete ("сообщение") ] где сообщение выводится при компилировании элемента программы, помеченного как устаревший. Ниже приведен краткий пример применения данного атрибута.

// Продемонстрировать применение атрибута Obsolete, using System; class Test {

[Obsolete("Лучше использовать метод MyMeth2.")] public static int MyMeth(int a, int b) { return a / b;

}

// Усовершенствованный вариант метода MyMeth. public static int MyMeth2(int a, int b) { return b == 0 ? 0 : a /b;

}

static void Main {

// Для этого кода выводится предупреждение.

Console.WriteLine("4 / 3 равно " + Test.MyMeth(4, 3));

//А для этого кода предупреждение не выводится.

Console.WriteLine("4 / 3 равно " + Test.MyMeth2(4, 3));

}

}

Когда по ходу компиляции программы в методе Main встречается вызов метода MyMeth , формируется предупреждение, уведомляющее пользователя о том, что ему лучше воспользоваться методом MyMeth2 .

  • Читать дальше
  • 1
  • ...
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: