- •Вопрос 1. Общее понятие ооп
- •Вопрос 2. Классы, объекты, абстрагирование
- •Вопрос 3. Полиморфизм, инкапсуляция, наследование
- •Вопрос4. История развития и базовый синтаксис с#
- •Вопрос 5. Основные черты языка с#
- •Перечисления
- •Вопрос 6. Система типов с#
- •Вопрос 7. Литералы, переменные, константы, перечисления Литералы. Представление значений
- •Переменные элементарных типов. Объявление и инициализация
- •Константы
- •Вопрос 8. Операции и выражения
- •Приоритет операций
- •Вопрос 9. Приведение типов
- •Вопрос 10 Контроль за перевыполнением
- •Вопрос 11 Процедурные и функциональные методы в с#
- •Вопрос 11 Создание и уничтожение объектов
- •Модификатор static и объект this Кроме выше рассмотренных модификаторов доступа (public,protected…) в языке c# существует еще ряд модификаторов. Один из них – модификатор static.
- •Уничтожение объектов в управляемой памяти. Деструктор
- •Вопрос 13 Параметризованные классы и индексаторы
- •Параметризованные классы – классы, позволяющие определить тип своих аргументов при непосредственном создании объектов.
- •Вопрос 14 управляющие операторы
- •Вопрос 15 массивы
- •Вопрос 16 перегрузка операций
- •Вопрос 17 Наследование. Конструкторы базового и производного классов
- •Вопрос 18 Переопределение членов базового класса:new модификатор
- •Вопрос 19 Прекращение наследования: sealed-спецификатор
- •Вопрос 20 Абстрактные функции и абстрактные классы
- •Вопрос 21 Операции is и as
- •Вопрос 22 Ввод и вывод данных с#
- •Потоки: байтовые, символьные, двоичные
- •Консольный ввод/вывод. Функции – члены класса Console
- •Консольный вывод. Форматирование
- •Нестандартное (custom) форматирование значений
- •Консольный ввод. Преобразование значений
Уничтожение объектов в управляемой памяти. Деструктор
Время начала работы сборщика мусора неизвестно. Сборка мусора предотвращает утечки памяти в управляемой динамически распределяемой памяти, программист освобождается от ответственности за проблемы, связанные с распределением этого ресурса.
Однако сборщик мусора не способен освобождать другие типы ресурсов, например, соединения с базами данных и серверами (надо разъединять) и открытые файлы (надо закрывать).
Если соответствующие фрагменты кода, обеспечивающие освобождение этих ресурсов, разместить в специальном блоке операторов с заголовком, состоящем из имени класса с префиксом '~' и пустым списком параметров (в деструкторе), то время их освобождения совпадет со временем выполнения кода данного деструктора, который запускается при разрушении объекта сборщиком мусора.
Синтаксис определения деструктора:
~ИмяКласса() { тело деструктора }
Однако время наступления этого события для конкретного объекта остается неопределенным. Порядок передачи управления деструкторам различных объектов в куче во время очистки памяти также неизвестен.
Вопрос 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 ИмяПомеченногоОператора;
позволяет ВЫХОДИТЬ из блоков, но не входить в них.
Обычно об этом операторе говорится много нехороших слов как о главном разрушителе структурированного программного кода, и его описание сопровождается рекомендациями к его НЕИСПОЛЬЗОВАНИЮ.
