
- •Лабораторная работа №1
- •Теоретические сведения. Среда .Net RunTime и библиотека Framework
- •Процесс компиляции с# - программы:
- •Управляемый и неуправляемый код.
- •Создание проекта.
- •Анатомия программы.
- •Контрольные вопросы.
- •Лабораторная работа №2
- •Теоретические сведения. Операторы условия.
- •Оператор множественного выбора:
- •Форматирование вывода
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №3
- •Теоретические сведения.
- •Объявление массивов
- •Значения по умолчанию
- •Обращение к элементам массива
- •Инициализация элементов массива
- •Цикл foreach
- •Инициализация одномерных массивов
- •Практический пример. Одномерный массив.
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №4
- •Теоретические положения. Уровни доступа
- •Объявление статических полей и методов класса
- •Пометка и сжатие
- •Форсированная сборка мусора
- •Методы. Передача параметров по значению
- •Методы. Передача параметров по ссылке.
- •Практический пример. Класс Array (одномерный массив).
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №5
- •Задание.
- •Список рекомендуемой литературы
Контрольные вопросы.
Что такое массив?
Объявление массива в С#.
Создание экземпляра массива.
Какими значениями инициализируется вновь созданный массив по умолчанию?
Правила обращения к элементам массива.
Способы инициализации элементов массива.
Структура инициализации элементов массива с использованием параметрического цикла.
Структура цикла foreach, его назначение и отличия от параметрического цикла for.
Отличительные особенности обработки массивов в циклах for и foreach.
Как в языке С# осуществить генерацию случайного целого числа в диапазоне [a, b]?
Как в языке С# произвести инициализацию целочисленной переменной значением, введенным с клавиатуры?
Как выполнить поиск максимального по модулю элемента массива?
Как определить количество четных элементов массива?
Как определить количество отрицательных элементов массива?
Как заменить положительные элементы массива нулями?
Лабораторная работа №4
Тема: Использование классов.
Цель: изучение понятия класса, конструктора, деструктора и метода, а также особенностей организации программы с использованием классов.
Теоретические положения. Уровни доступа
В языке C# доступ для членов класса регулируется несколькими способами:
public |
Общий (неограниченный) доступ |
protected |
Доступ ограничен в пределах данного класса и классов, производных от данного |
internal |
Доступ ограничен сборкой, в которой находится данный класс |
protected internal |
Доступ ограничен в пределах данного класса и классов, производных от данного, или доступ ограничен сборкой, в которой находится данный класс |
private |
Доступ ограничен в пределах данного класса |
Доступом по умолчанию является private.
Доступ для классов верхнего уровня (классов, не вложенных в другие классы) ограничивается модификаторами internal и public (по умолчанию: internal).
Модификатор доступа, должен появляться перед каждым отдельным полем или методом (иначе данный элемент будет иметь уровень доступа private).
Поля класса могут иметь модификатор readonly, который означает, что значение данной переменной класса может либо быть задано сразу, либо в конструкторе (см. ниже), и в дальнейшем ее значение изменяться не может.
Объявление статических полей и методов класса
Для связи членов класса не с конкретными экземплярами класса, а с классом в целом, используются объявления статических переменных и статических функций.
Напоминаем, что статические переменные - это переменные, значения которых для каждого экземпляра класса одинаковы, а статические функции предназначены для работы со статическими переменными. Статическая функция, естественно, this не получает и поэтому обращаться к нестатическим членам класса не может. Для доступа к обычному члену класса необходимо создать объект класса, а для доступа к статическому элементу необходимо воспользоваться именем класса.
Конструкторы
Конструктор - это функция, которая вызывается при создании объекта класса. Исключение составляет лишь статический конструктор - функция, которая вызывается перед созданием первого экземпляра класса (статическому конструктору ничего не известно о создаваемом объекте). Статический конструктор параметров не получает, а статических деструкторов не существует.
Деструкторы
В C# деструктор (или завершитель) вызывается сборщиком при разрушении объекта. Напрямую управлять вызовом деструктора невозможно, он вызывается автоматически при сборке мусора.
Ссылочный тип
Объекты любых классов являются ссылочными типами. Это означает, что при объявлении они инициализируются null-значениями, и для них необходимо выделять память с помощью оператора new (естественно, объекты размещаются в куче).
Сборка мусора.
Автоматическая сборка мусора (выделенной и более не используемой памяти) предназначена для облегчения жизни программисту, позволяя не заботиться о возможных утечках памяти (например, удалить выделенный в куче объект).
По идее, память из кучи в среде .NET Runtime выделяется достаточно быстро. Системе всего лишь необходимо удостовериться, что в управляемой куче достаточно памяти для запрашиваемого объекта, вернуть указатель на эту память и перевести указатель на следующий после последнего объекта адрес. Соответственно, простота выделения памяти сопровождается некоторым усложнением очистки. Для повышения быстродействия большие объекты (>20 КБайт) выделяются из отдельной кучи.