Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория_к_экзамену_ООП.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
422 Кб
Скачать
☆

Уничтожение объектов в управляемой памяти. Деструктор

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

Однако сборщик мусора не способен освобождать другие типы ресурсов, например, соединения с базами данных и серверами (надо разъединять) и открытые файлы (надо закрывать).

Если соответствующие фрагменты кода, обеспечивающие освобождение этих ресурсов, разместить в специальном блоке операторов с заголовком, состоящем из имени класса с префиксом '~' и пустым списком параметров (в деструкторе), то время их освобождения совпадет со временем выполнения кода данного деструктора, который запускается при разрушении объекта сборщиком мусора.

Синтаксис определения деструктора:

~ИмяКласса() { тело деструктора }

Однако время наступления этого события для конкретного объекта остается неопределенным. Порядок передачи управления деструкторам различных объектов в куче во время очистки памяти также неизвестен.

Вопрос 13 Параметризованные классы и индексаторы

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

public class AClass1

{

public AClass1() { }

private int[] imyArray = new int[20];

public int[] imyArray2 = new int[10];

public int this[int ind1]

{

get

{ return imyArray[ind1]; }

set

{ imyArray[ind1] = value; }

}

static void Main(string[] args)

{

AClass1 K = new AClass1();

K[0] = 5;

K.imyArray2[0]=3;

}

}

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

namespace ConsoleApplication1

{

public class AClass1<T>

{

public AClass1() { }

private T[] imyArray = new T[20];

private T[,] imyArray2 = new T[20,20];

public T this[int ind1]

{

get

{ return imyArray[ind1]; }

set

{ imyArray[ind1] = value; }

}

public T this[int ind1,int ind2]

{

get

{ return imyArray2[ind1,ind2]; }

set

{ imyArray2[ind1,ind2] = value; }

}

}

public class M

{

static void Main(string[] args)

{

AClass1<string> K = new AClass1<string>();

K[0, 0] = "3";

K[0] = "5";

Console.WriteLine(K[0, 0]);

Console.WriteLine(K[0]);

Console.ReadLine();

}

}

}

Вопрос 14 управляющие операторы

Управляющие операторы применяются в рамках методов. Они определяют последовательность выполнения операторов в программе и являются основным средством реализации алгоритмов.

Различаются следующие категории управляющих операторов:

  • Условные операторы. Вводятся ключевыми словами if, if ... else ..., switch.

  • Циклы. Вводятся ключевыми словами while, do ... while, for, foreach.

  • Операторы перехода (в рамках методов). Вводятся ключевыми словами goto, break, continue.

  • GOTO Объявляется метка (правильнее "оператор с меткой"). Оператор может быть пустым. Метка-идентификатор отделяется от оператора двоеточием. В качестве дополнительного разделителя могут быть использованы пробелы, символы табуляции и перехода на новую строку. Метка, как и любое другое имя, подчиняется правилам областей видимости. Она видна в теле метода только в одном направлении: из внутренних (вложенных) блоков. Поэтому оператор перехода

  • goto ИмяПомеченногоОператора;

  • позволяет ВЫХОДИТЬ из блоков, но не входить в них.

  • Обычно об этом операторе говорится много нехороших слов как о главном разрушителе структурированного программного кода, и его описание сопровождается рекомендациями к его НЕИСПОЛЬЗОВАНИЮ.