Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gosy_nepolnostyu_7v1.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.7 Mб
Скачать

9. Создание и обработка исключений на пример с#.

(Туривный С.)

Функции обработки исключений на языке C# помогают обрабатывать любые непредвиденные или исключительные ситуации, происходящие при выполнении программы. При обработке исключений используются ключевые слова try, catch и finally для попыток применения действий, которые могут не достичь успеха, для обработки ошибок, если предполагается, что это может быть разумным, и для последующего освобождения ресурсов. Исключения могут генерироваться средой CLR, платформой .NET Framework или внешними библиотеками, либо кодом приложения. Исключения создаются при помощи ключевого слова throw.

Во многих случаях исключение может инициироваться не методом, вызванным непосредственно кодом, а другим методом, расположенным ниже в стеке вызовов. Когда это происходит, среда CLR выполняет откат стека в поисках метода с блоком catch для определенного типа исключения. При обнаружении первого такого блока catch этот блок выполняется. Если среда CLR не находит соответствующего блока catch где-либо в стеке вызовов, она завершает процесс и отображает пользователю сообщение.

Исключения имеют следующие свойства.

  • Исключения имеют типы, в конечном счете являющиеся производными от System.Exception.

  • Следует использовать блок try для заключения в него инструкций, которые могут выдать исключения.

  • При возникновении исключения в блоке try поток управления немедленно переходит к первому соответствующему обработчику исключений, присутствующему в стеке вызовов. В языке C# ключевое слово catch используется для определения обработчика исключений.

  • Если обработчик для определенного исключения не существует, выполнение программы завершается с сообщением об ошибке.

  • Не перехватывайте исключение, если его нельзя обработать, и оставьте приложение в известном состоянии. При перехвате System.Exception вновь инициируйте это исключение с использованием ключевого слова throw в конце блока catch.

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

  • Исключения могут явно генерироваться программной с помощью ключевого слова throw.

  • Объекты исключения содержат подробные сведения об ошибке, такие как состояние стека вызовов и текстовое описание ошибки.

  • Код в блоке finally выполняется, даже при возникновении исключения. Блок finally используется для освобождения ресурсов, например для закрытия потоков или файлов, открытых в блоке try.

Примеры:

try {    // Code to try goes here. } catch (SomeSpecificException ex) {    // Code to handle the exception goes here.    // Only catch exceptions that you know how to handle.    // Never catch base class System.Exception without    // rethrowing it at the end of the catch block. }

try {    // Code to try goes here. } finally {    // Code to execute after the try block goes here. }

try {    // Code to try goes here. } catch (SomeSpecificException ex) {    // Code to handle the exception goes here. } finally {    // Code to execute after the try (and possibly catch) blocks    // goes here. }

(https://msdn.microsoft.com/ru-ru/library/ms173160.aspx, https://msdn.microsoft.com/ru-ru/library/ms173162.aspx)

10. Понятие шаблонов, и работа с шаблонами на примере С++.

(Туривный С.)

Шабло́ны (англ. template) — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию).

В C++ возможно создание шаблонов функций и классов.

Шаблоны позволяют создавать параметризованные классы и функции. Параметром может быть любой тип или значение одного из допустимых типов (целое число, enum, указатель на любой объект с глобально доступным именем, ссылка). Например, нам нужен какой-то класс:

class SomeClass{ int SomeValue; int SomeArray[20]; ... };

Для одной конкретной цели мы можем использовать этот класс. Но, вдруг, цель немного изменилась, и нужен еще один класс. Теперь нужно 30 элементов массива SomeArray и вещественный тип SomeValue элементов SomeArray. Тогда мы можем абстрагироваться от конкретных типов и использовать шаблоны с параметрами. Синтаксис: в начале перед объявлением класса напишем слово template и укажем параметры в угловых скобках. В нашем примере:

template < int ArrayLength, typename SomeValueType > class SomeClass{ SomeValueType SomeValue; SomeValueType SomeArray[ ArrayLength ]; ... };

Тогда для первой модели пишем:

SomeClass < 20, int > SomeVariable;

для второй:

SomeClass < 30, double > SomeVariable2;

Хотя шаблоны предоставляют краткую форму записи участка кода, на самом деле их использование не сокращает исполняемый код, так как для каждого набора параметров компилятор создаёт отдельный экземпляр функции или класса. Как следствие, исчезает возможность совместного использования скомпилированного кода в рамках разделяемых библиотек.

Шаблон функции начинается с ключевого слова template, за которым в угловых скобках следует список параметров. Затем следует объявление функции:

template< typename T > void sort( T array[], int size );  // прототип: шаблон sort объявлен, но не определён template< typename T > void sort( T array[], int size )   // объявление и определение {  T t;  for (int i = 0; i < size - 1; i++)    for (int j = size - 1; j > i; j--)      if (array[j] < array[j-1])      {        t = array[j];        array[j] = array[j-1];        array[j-1] = t;      } } template< int BufferSize >         // целочисленный параметр char* read() {  char *Buffer = new char[ BufferSize ];  /* считывание данных */  return Buffer; }

Ключевое слово typename появилось сравнительно недавно, поэтому стандарт[1] допускает использование class вместо typename:

template< class T >

Вместо T допустим любой другой идентификатор.

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

template< class T > class List {  /* ... */ public:  void Add( const T& Element );  bool Find( const T& Element );  /* ... */ };

Параметрами шаблонов могут быть: параметры-типы, параметры обычных типов, параметры-шаблоны.

Для параметров любого типа можно указывать значения по умолчанию.

template< class T1,                    // параметр-тип          typename T2,                 // параметр-тип          int I,                       // параметр обычного типа          T1 DefaultValue,             // параметр обычного типа          template< class > class T3,  // параметр-шаблон          class Character = char       // параметр по умолчанию        >

(https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_C%2B%2B)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]