Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

□ 

Exception
— базовый класс для всех объектов исключений.

□ 

SystemException
— базовый класс для всех ошибок, создаваемых во время выполнения.

□ 

IndexOutOfRangeException
возникает, когда индекс массива во время выполнения оказывается вне границ заданного диапазона.

□ 

NullReferenceException
порождается, когда во время выполнения ссылаются на
null
.

□ 

InvalidOperationException
порождается некоторыми методами, когда вызов метода бывает не действителен для текущего состояния объекта.

□ 

ArgumentException
— базовый класс всех исключений для аргументов.

□ 

ArgumentNullException
порождается если аргумент задан как
null
, когда это недопустимо.

□ 

InteropException
является базовым классом для исключений, которые возникают или направлены на среды вне CLR.

Одним исключением, которое возникает независимо от того, будет ли оно специально порождаться или нет, является

System.OverflowException
, связанное с вычисленными результатами, превосходящими диапазон значений типа данных переменной результата. Инструкции
checked
и
unchecked
могут инициировать или подавлять связанные с этим исключения. Дополнительная информация о
checked
и
unchecked
находится в разделе данного приложения о ключевых словах.

Условная компиляция

Препроцессор в C# эмулируется. Он выполняется как отдельный процесс, прежде чем компилятор начнет свою работу. Поддерживаемые здесь директивы больше всего соответствуют C++, чем какому-либо другому языку. Конечно, в Java не существует эквивалентов функциональности, описанных в этом разделе. Разрешается определять символы, которые проверяются с помощью простых условных директив. Те, которые оказываются

true
, включаются и компилируются, иначе код игнорируется. Определение символа может происходить двумя способами. Прежде всего с использованием ключа компилятора
/define
, за которым следует двоеточие и определяемый символ, например:

csc /define:TEST_TEST samples.cs

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

#define
. В этом случае директива должна появиться раньше, чем что-либо другое, и применяется ко всем лексемам в области действия файла. Здесь перечислены допустимые условные директивы:

□ 

#if
используется для проверки существования символа

□ 

#elif
позволяет добавить несколько ветвей к инструкции
#if

□ 

#else
предоставляет окончательное альтернативное условие для
#if
и
#elif

□ 

#endif
заканчивает инструкцию
#if

namespace Samples {

 using System;

#if EXAMPLE

 public class Example {

public Example {

}

 }

#elif TEST_TEST

 public class Test {

public Test {

}

 }

#else

 public class None {

public None {

}

 }

#endif

}

Добавление инструкции

#define TEST_TEST
делает класс
Test
видимым для компиляции, a
#define EXAMPLE
делает класс
Example
видимым для компиляции. Если ничего не добавлять, то будет компилироваться класс
None
. Для препроцессора C# доступны также две другие директивы —
#warning
и
#error
. Они должны помещаться в условное выражение
#if
. Попробуйте добавить следующую строку под инструкцией
#else
в приведенный код:

#warning I wouldn't try to instantiate the example object if I were you

C# также поддерживает условную функциональность. В коде ниже добавление условного атрибута в

AMethod
делает его компилируемым только в том случае, когда определен символ
Test
:

[conditional("TEST_TEST")]

public void AMethod {

 string s = "I am available only when Test is defined";

}

Вопросы безопасности

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

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

  • Читать дальше
  • 1
  • ...
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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