Интерфейсы в сравнении с абстрактными базовыми классами

Интерфейсы в сравнении с абстрактными базовыми классами

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

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

public interface IAmABadInterface {

 // Ошибка! Интерфейс не может определять данные!

 int myInt = 0;

 // Ошибка! Допускается только абстрактные члены!

 void MyMethod() {Console.WriteLine("Фи!");}

}

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

Еще более важно то, что программирование на основе интерфейсов обеспечивает альтернативный способ реализаций полиморфного, поведения. Хотя множество классов (или структур) реализует один и тот же интерфейс своими собственными способами, вы имеете возможность обращаться со всеми типами по одной схеме. Чуть позже вы убедитесь, что интерфейсы исключительно полиморфны, потому что с их помощью возможность демонстрировать идентичное поведение получают типы, не связанные классическим наследованием.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.2. Отношения между классами

Из книги Самоучитель UML автора Леоненков Александр

5.2. Отношения между классами Кроме внутреннего устройства или структуры классов на соответствующей диаграмме указываются различные отношения между классами. При этом совокупность типов таких отношений фиксирована в языке UML и предопределена семантикой этих типов


Динамический вызов в сравнении со статическим

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

Динамический вызов в сравнении со статическим До сих пор говорилось о том, что СОМ основан на клиентских программах, имеющих на этапе разработки предварительную информацию об определении интерфейса. Это достигается либо через заголовочные файлы C++ (для клиентов C++), либо


ГОСТИНАЯ: О сравнении мироконцепций

Из книги Журнал «Компьютерра» № 21 от 05 июня 2007 года автора Журнал «Компьютерра»

ГОСТИНАЯ: О сравнении мироконцепций Автор: Дмитрий ШабановЕхал я днями в метро, стоял у дверей, читал журнал. В вагон зашел мой старый знакомый. Лет двадцать пять назад я был школьником, а он руководил кружком в районном доме пионеров. В том, что я сейчас вроде как


Контроль в сравнении с экспертной оценкой

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

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


Работа с базовыми элементами управления

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Работа с базовыми элементами управления Пространство имен System.Windows.Forms определяет множество "базовых элементов управления", которые можно видеть во многих типичных окнах (это кнопки, надписи, текстовые окна, переключатели и т.д.). Вы, наверное, уже знаете об основных


Поддержка подсказок MFC-классами

Из книги Исчерпывающее руководство по написанию всплывающих подсказок автора Джек Роджер

Поддержка подсказок MFC-классами Библиотека MFC располагает двумя классами для поддержки всплывающих подсказок: CToolTipCtrl и CWnd. CToolTipCtrl инкапсулирует функциональность стандартного элемента управления ToolTip (из библиотеки элементов управления общего назначения – Common Controls DLL) и


3.4. Отношения между классами

Из книги Объектно-ориентированный анализ и проектирование с примерами приложений на С++ автора Буч Гради

3.4. Отношения между классами Типы отношений Рассмотрим сходства и различия между следующими классами: цветы, маргаритки, красные розы, желтые розы, лепестки и божьи коровки. Мы можем заметить следующее: • Маргаритка - цветок. • Роза - (другой) цветок. • Красная и желтая


Что делать с отложенными классами?

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Что делать с отложенными классами? Присутствие отложенных элементов в системе вызывает вопрос: "что случится, если компонент rotate применить к объекту типа FIGURE?" или в общем виде - "можно ли применить отложенный компонент к прямому экземпляру отложенного класса?" Ответ может


Автоматические индексы в сравнении с определенными пользователем индексами

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Автоматические индексы в сравнении с определенными пользователем индексами Firebird автоматически создает индексы для обеспечения различных ограничений целостности (более подробную информацию см. в главах 16 и 17). Для удаления таких индексов необходимо удалить


Динамический в сравнении со статическим SQL

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Динамический в сравнении со статическим SQL Операторы SQL, включенные в код и обработанные препроцессором, иногда называются статическим SQL. В отличие от них операторы, которые генерируются клиентским приложением и передаются для выполнения на сервер во время работы,


Позиционированные операции в сравнении с поисковыми

Из книги Священные войны мира FOSS автора Федорчук Алексей Викторович

Позиционированные операции в сравнении с поисковыми Операторы UPDATE и DELETE могут быть позиционированными (выполняются над одной и только одной строкой) и поисковыми (выполняются над нулевым или большим количеством строк). Строго говоря, позиционированное изменение может


Пересылка в сравнении с COMMIT

Из книги автора

Пересылка в сравнении с COMMIT Термин "пересылка" (post), вероятно, был заимствован у старых настольных бухгалтерских программ в качестве аналога пересылаемых журналов в бухгалтерских системах. Такая аналогия полезна для различения двух разделенных операций записи обратимых


Чистка в сравнении со сборкой мусора

Из книги автора

Чистка в сравнении со сборкой мусора Сборка мусора (Garbage Collection, GB) - это постоянный фоновый процесс, который является функцией нормальной деятельности по поиску записей и проверке версий записей, которая выполняется для каждой транзакции. Когда обнаруживается устаревшая


Соблюдение требований, предъявляемых другими классами, с помощью протоколов

Из книги автора

Соблюдение требований, предъявляемых другими классами, с помощью протоколов В языке Objective-C существует концепция под названием «протокол». Протоколы встречаются и во многих других языках, но называются везде по-разному; например, в Java аналогичная сущность называется