Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Интерфейсы в сравнении с абстрактными базовыми классами
Интерфейсы в сравнении с абстрактными базовыми классами
С учетом знаний, полученных в главе 4, вы можете спросить, какова причина выдвижения типов интерфейса на первое место. Ведь в C# позволяется строить абстрактные типы класса, содержащие абстрактные методы. И, подобно интерфейсу, при получении класса из абстрактного базового класса, класс тоже обязан определить детали абстрактных методов (если, конечно, производный класс не объявляется абстрактным). Однако возможности абстрактных базовых классов выходят далеко за рамки простого определения группы абстрактных методов. Они могут определять открытые, приватные и защищенные данные состояния, а также любое число конкретных методов, которые оказываются доступными через подклассы.
Интерфейсы, с другой стороны, – это чистый протокол. Интерфейсы никогда не определяют данные состояния и никогда не обеспечивают реализацию методов (при попытке сделать это вы получите ошибку компиляции).
public interface IAmABadInterface {
// Ошибка! Интерфейс не может определять данные!
int myInt = 0;
// Ошибка! Допускается только абстрактные члены!
void MyMethod() {Console.WriteLine("Фи!");}
}
Типы интерфейса оказываются полезными и в свете того, что в C# (и других языках .NET) не поддерживается множественное наследование, а основанный на интерфейсах протокол позволяет типу поддерживать множество вариантов поведения, избегая при этом проблем, возникающих при наследовании от множества базовых классов.
Еще более важно то, что программирование на основе интерфейсов обеспечивает альтернативный способ реализаций полиморфного, поведения. Хотя множество классов (или структур) реализует один и тот же интерфейс своими собственными способами, вы имеете возможность обращаться со всеми типами по одной схеме. Чуть позже вы убедитесь, что интерфейсы исключительно полиморфны, потому что с их помощью возможность демонстрировать идентичное поведение получают типы, не связанные классическим наследованием.
- Определение интерфейсов в C#
- Реализация интерфейсов в C#
- Интерфейсы в сравнении с абстрактными базовыми классами
- Вызов членов интерфейса на уровне объекта
- Интерфейсы в качестве параметров
- Интерфейсы в качестве возвращаемых значений
- Массивы интерфейсных типов
- Явная реализация интерфейса
- Построение иерархии интерфейсов
- Реализация интерфейсов в Visual Studio 2005
- Создание перечислимых типов (Enumerable и IEnumerator)
- Создание клонируемых объектов (ICloneable)
- Создание сравнимых объектов (IComparable)
- Интерфейсы из пространства имен System.Collections
- Классы из пространства имен System.Collections
- Пространство имен System.Collections.Specialized
- Резюме
- 3.4. Отношения между классами
- 5.21 IP-адреса, интерфейсы и множественное пребывание
- Множественные интерфейсы и имена методов
- 2.2 Интерфейсы IDE, EIDE и АТА
- 7.5 Программные интерфейсы приложений для адаптеров шины
- Абстрактные базы как двоичные интерфейсы
- Интерфейсы накопителей на жестких магнитных дисках
- Глава 10 Интерфейсы компьютерных сетей
- Интерфейсы
- 8.4.4. Цифровые интерфейсы P&D, DVI и DFP
- 8.3.2. Последовательные интерфейсы
- 15.1.3. XPath и другие интерфейсы