Наследование. Множественное наследование. Интерфейсы — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Наследование. Множественное наследование. Интерфейсы

2017-06-13 414
Наследование. Множественное наследование. Интерфейсы 0.00 из 5.00 0 оценок
Заказать работу

Когда построен полезный класс, он может многократно использоваться клиентами этого класса. Повторное использование – это одна из главных целей ООП. Но и для хороших классов неизбежно наступает момент, когда необходимо расширить возможности класса, придать ему новую функциональность, изменить интерфейс. Так, существующий класс не меняется, но создается его потомок, продолжающий дело отца, только уже на новом уровне.

Класс потомок наследует все возможности родительского класса – все поля и все методы, открытую и закрытую часть класса, статическую и динамическую части класса. Потомок может не иметь прямого доступа ко всем наследуемым полям и методам. Поля и методы родительского класса, снабженные атрибутом private, хотя и наследуются, но являются закрытыми, и методы, создаваемые потомком, не могут к ним обращаться напрямую, а только через методы, наследованные от родителя. Хорошей стратегией при проектировании класса является использование модификатора доступа protected вместо модификатора private, разрешая потомкам класса прямой доступ ко всем полям и методам родительского класса.

Потомок наследует почти все, но не все. Он не наследует конструкторы родительского класса. Конструкторы потомок должен создавать сам.

Потомок класса, наследовав от родительского класса какой-либо метод, может его переопределить, задав собственную реализацию, отличную от реализации, которая используется родителем. Переопределяемый метод родителя должен снабжаться модификатором override.

Интерфейсы – это еще один инструмент реализации полиморфизма в С#. Интерфейс представляет собой набор методов (свойств, событий, индексаторов), реализацию которых должен обеспечить класс, который реализует интерфейс.

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

Объявление интерфейса: интерфейс – это единица уровня класса, он объявляется за пределами класса, при помощи ключевого слова interface:

interface ISomeInterface
{
// тело интерфейса
}

Множественное наследование – это когда один класс сразу наследуется от нескольких классов. Но бывает так, что базовые классы содержат методы с одинаковыми именами, в результате чего возникают определенные неточности и ошибки. Множественное наследование есть в языке C++, а в C# от него отказались и внесли интерфейсы. В C# класс может реализовать сразу несколько интерфейсов. Это и является главным отличием использования интерфейсов и абстрактных классов. Кроме того, конечно же, абстрактные классы могут содержать все остальные члены, которых не может быть в интерфейсе, и не все методы/свойства в абстрактном классе должны быть абстрактными.

 

Перечисления. Шкалы

Перечисление

Частный случай класса, класс, заданный без собственных методов. Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. Поскольку у перечислений нет собственных методов, то синтаксис объявления этого класса упрощается, остается обычный заголовок и тело класса, содержащее список возможных значений. Вот формальное определение синтаксиса перечислений:

[атрибуты][модификаторы]enum имя_перечисления[:базовый класс]

{список_возможных_значений}

 

Модификаторами могут быть четыре известных модификатора доступа и модификатор new. Ключевое слов enum (сокращение слова enumeration) говорит, что определяется частный случай класса - перечисление. Список возможных значений задает те значения, которые могут получать объекты этого класса. Возможные значения должны быть идентификаторами. Как и всюду в C#, при построении идентификаторов допускаются не только символы латиницы, но и символы кириллицы. Для имен переменных и других программных сущностей принято использовать латиницу, для элементов перечисления использование слов русского языка является нормой. Идентификаторы являются константами, называемыми перечислителями (enumerator), а само перечисление можно рассматривать как список перечислителей.

Приведу примеры объявлений классов-перечислений:

public enum Profession{teacher, engineer, businessman};public enum MyColors {red, blue, yellow, black, white};public enum TwoColors {black, white};public enum Rainbow {красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый};public enum Sex: byte {man=1, woman};public enum Days:long {Sun,Mon,Tue,Wed,Thu, Fri, Sat};

Шкалы

Перечисление, содержащее n элементов, будем называть шкалой, если отображение задано для каждого элемента перечисления и элемент с индексом k отображается в число 2k.

Каждый объект перечисления, заданного шкалой, представляется целым числом в диапазоне [0, 2n -1]. Это число следует рассматривать как число в двоичной системе счисления - набор из n битов (разрядов), каждый из которых описывает соответствующее свойство объекта. Единица в разряде указывает, что объект обладает данным свойством; ноль означает отсутствие свойства. Для объектов рассматриваемого нами класса Person можно ввести в рассмотрение набор из трех свойств - доброта, ум, богатство. Определим соответствующее перечисление как шкалу

public enum Dream_Properties { умный = 1, добрый = 2, богатый = 4 }

Добавим в класс Person соответствующее поле и метод-свойство для доступа к нему:

Dream_Properties properties;public Dream_Properties Properties{ get { return properties; } set { properties = value; }}

Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.