Лабораторная работа №10
Тема: Динамические структуры данных. Объектно-ориентированное программирование односвязного списка.
Цель: освоение составления и тестирования алгоритмов и объектно-ориентированных программ, использующих динамические структуры данных.
Теоретические положения
Инкапсуляция с использованием свойств типа
Хотя можно инкапсулировать поле данных с использованием традиционной пары методов селектора (get) и модификатора (set), технология .NET и поддерживаемые ею языки предлагают более предпочтительный способ защиты данных с помощью свойств. Следует иметь в виду, что свойства в терминах кода CIL всегда отображаются на реальные методы доступа и изменения. Поэтому программист, как дизайнер класса, может реализовать любую внутреннюю логику, которую нужно выполнить перед присваиванием значения (например, преобразовать в верхний регистр, очистить от недопустимых символов, проверить границы числовых значений и т.д.).
Ниже приведены синтаксис свойств класса, обеспечивающие инкапсуляцию каждого поля с применением синтаксиса свойств вместо традиционных методов get/set:
public ТипДанныхСвойства ИмяСвойства
{
get { return ИмяПоля; }
set { ИмяПоля = value; }
}
Свойство С# состоит из контекстов чтения get (метод доступа) и set (метод изменения), вложенных непосредственно в контекст самого свойства. При наличии этих свойств вызывающему коду кажется, что он имеет дело с общедоступным элементом данных; однако при каждом обращении вызывается конкретный контекст get или set, обеспечивая инкапсуляцию.
В некоторых случаях удобно специфицировать уникальные уровни доступа для логики контекстов get и set. Для этого следует добавить префикс – ключевое слово доступа к соответствующим контекстам. При этом контекст без префикса получает видимость объявления свойства. В следующем примере логика set может быть вызвана только текущим классом и его производными классами, а потому не может быть вызвана из экземпляра объекта:
public ТипДанныхСвойства ИмяСвойства
{
get { return ИмяПоля; }
protected set { ИмяПоля = value; }
}
Виртуальные методы
Метод базового класса, которому при определении был указан модификатор virtual, и который был переопределен в одном или более потомственных классов называется виртуальным методом класса. Каждый наследник может иметь собственную версию виртуального метода. При вызове такого метода класса, выбор конкретной версии зависит от того типа объекта, на который ссылается ссылочная переменная, осуществляющая вызов. Выбор производится во время выполнения программы.
Таким образом, если класс является родительским для нескольких других классов и при этом в нем существует виртуальный метод, переопределенный в потомках, то тогда при ссылке переменной базового типа на различные типы объектов базового и производного типов будут производиться вызовы различных версий.
При переопределении виртуального метода в дочернем классе ему указывается модификатор override. В потомке имя метода, параметры остаются прежними, как и в базовом классе. По отношению к виртуальным методам нельзя применять модификаторы static, abstract.
Дата добавления: 2021-12-14; просмотров: 301;