
- •1 Концепция структурного программирования. Причины появления концепции. Модульность и функции. Ограничения на логические конструкции. Использование оператора goto.
- •Теорема о структурном программировании (Теорема Бёма — Якопини)
- •3 Платформа .Net Framework. Многоязыковое программирование. Кроссплатформенность по. Web-ориентированные приложения.
- •Преимущества технологии динамической компиляции
- •5 Построение приложения Windows в интегрированной среде программирования
- •6 Основные типы данных
- •7 Символы и строки. Символы, строки и массивы строк. Операции над строками
- •8 Структура программы на языке c#. Понятие пространства имен. Иерархия пространств имен. Видимость имен.
- •9 Операторы. Основные языка с#. Арифметические и логические операторы. Бинарные и унарные операторы. Составные операторы. Понятие перегрузки операторов.
- •10 Выражения. Приоритет и ассоциативность операторов. Порядок вычисления выражения.
- •11 Преобразования типов. Иерархия численных типов. Явное и неявное преобразование типов. Возможные ошибки.
- •12 Тема: Модификаторы доступа языка c#. Необходимые знания: Назначение и функции модификаторов private, public, protected, internal, protected internal, private protected.
- •13 Выбор вариантов.
- •If (Условие)
- •14 Циклы.
- •15 Классы памяти
- •16 Функции в языке с#
- •17 Массивы. Создание и инициализация. Ссылки на массив. Двухмерные и многомерные массивы. Инициализация массивов. Невыровненные массивы.
- •18 Понятие класса. Определение класса и экземпляр класса. Данные и методы. Ключевое слово partial.
- •19 Создание объекта класса.
- •20 Деструкторы и «сборка мусора». Оператор «new». Резервирование и освобождение памяти. Деструкторы и «сборка мусора».
- •21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.
- •Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.
- •23 Свойства c# (Понятие инкапсуляции и свойства в c#. Использование ключевых слов «get» и «set». Преимущества использования свойств.)
- •24 Механизм исключений (Назначение исключений. Основные категории исключений. Ключевые слова try, catch и finally, throw.)
- •25 Наследование в c#. Понятие наследования в c#. Механизм наследования. Базовый и производный классы. Наследование и модификаторы доступа.
19 Создание объекта класса.
Создание объекта класса с помощью оператора «new». Инициализация данных класса. Конструкторы.
Класс представляет новый тип, который определяется пользователем. После слова class идет имя класса и далее в фигурных скобках идет собственно содержимое класса.
Класс может хранить некоторые данные. Для хранения данных в классе применяются поля (переменные, определенные на уровне класса).
Кроме того, класс может определять некоторое поведение или выполняемые действия. Для определения поведения в классе применяются методы.
class Класс
{
private ТипПеременной Поле1; // private – внутренняя переменная
public ТипПеременной Поле2; // public – общая переменная
public ТипПеременной Поле3 = ЗначениеПоУмолчанию;
public void Метод() // Метод void не возвращает переменные
{
Оператор1(Поле2);
Оператор2();
…
}
public Класс (ТипПеременной Параметр1, ТипПеременной Парметр2) // Конструктор класса
{
Поле1 = Параметр1;
Оператор2();
…
}
}
После определения класса мы можем создавать его объекты. Для создания объекта применяются конструкторы. По сути конструкторы представляют специальные методы, которые называются так же как и класс, и которые вызываются при создании нового объекта класса и выполняют инициализацию объекта. Общий синтаксис вызова конструктора:
Класс Объект = new Класс(ПараметрыКонструктора);
Если в классе не определено ни одного, то для этого класса автоматически создается пустой конструктор по умолчанию, который не принимает никаких параметров.
Для обращения к функциональности класса - полям, методам (а также другим элементам класса) применяется точечная нотация точки - после объекта класса ставится точка, а затем элемент класса:
Объект.ПолеКласса
Объект.МетодКласса(ПараметрыМетода)
20 Деструкторы и «сборка мусора». Оператор «new». Резервирование и освобождение памяти. Деструкторы и «сборка мусора».
В программах на C# память для объектов нужно выделять динамически. Динамическое выделение памяти для объектов или других видов данных реализуется с помощью оператора new (просим программу выделить нам память, например, для переменной). Общая форма оператора new:
new ClassName(parameters_list)
где ClassName – имя класса, для объекта которого выделяется память;
parameter_list – список параметров, которые принимает один из конструкторов класса. Обязательно, в классе должен быть реализован конструктор, параметры которого совпадают с parameter_list. Конструктор может быть без параметров (конструктор по умолчанию).
После того, как объект выполнил свою работу, он (возможно) уже не используется в программе (но память все еще занимает). Если в программе создано много объектов классов, то может возникнуть ситуация, когда выделенной памяти не хватит для создания следующего объекта.
В этом случае, важно освободить память что была выделена под объекты, которые уже не используются. Для этого система динамического распределения памяти C# использует так называемую «сборку мусора». Если происходит «сборка мусора», то освобождается память для объектов, которые не используются.
Чтобы определить, используется объект или нет, система «сборки мусора» просматривает ссылки на этот объект на данный момент. Если ссылки отсутствуют, то этот объект считается ненужным и можно выполнять освобождение памяти для него. В дальнейшем эта освобожденная память может быть использована для распределения других объектов.
Если использованный объект становится ненужным, то выделенная для него память может быть освобождена не сразу, а позднее. В системе динамического управления памятью C# «сборка мусора» происходит только время от времени во время выполнения программы. «Сборка мусора» может не происходить если есть небольшое количество неиспользуемых объектов.
Бывают случаи в программе, когда перед освобождением памяти, выделенной под объект нужно выполнить какие-то действия. Деструктор, это метод который вызывается для гарантированного освобождения памяти под объект. В деструкторе указываются те действия, которые необходимо выполнить прежде чем уничтожить объект.
Общая форма деструктора имеет вид:
~имя_класса()
{
// код деструктора
}
где имя_класса – имя конкретного класса.
У деструктора отсутствует тип, который возвращается и список параметров.
В C# явно вызвать деструктор не получится, потому что на это нет специального оператора. Например, в языке C++ для этих целей используется оператор delete, который в языке C# не используется. Но в C++ не реализована система «сборки мусора».
Однако, деструктор автоматически вызывается системой «сборки мусора» перед уничтожением памяти под объект его класса.
Пример. В примере объявляется класс MyClass, в котором реализован деструктор ~MyClass().
// пример класса, в котором реализован деструктор
class MyClass
{
int[] A; // внутренний массив A
// конструктор класса
public MyClass()
{
// выделение памяти для массива A
A = new int[100];
}
// деструктор класса
~MyClass()
{
// действия, которые необходимо выполнить, если произойдет "сборка мусора",
// и может быть вызван деструктор
// ...
}
}