Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Определение интерфейсов в C#
Определение интерфейсов в C#
Изложение материала этой главы мы начнем с формального определения типа "интерфейс". Интерфейс – это просто именованная коллекция семантически связанных абстрактных членов. Эти члены определяются интерфейсом в зависимости от поведения, которое моделирует данный интерфейс. Интерфейс отражает поведение, которое может поддерживаться данным классом или структурой.
В рамках синтаксиса C# интерфейс определяется с помощью ключевого слова interfасе. В отличие от других типов .NET, интерфейсы никогда не указывают базовый класс (включая System.Object) и для их членов никогда не указываются модификаторы доступа (поскольку все члены интерфейса неявно считаются открытыми). Вот пример пользовательского интерфейса, определенного на языке C#.
// Этот интерфейс определяет наличие вершин.
public interface IPointy {
// Неявно открытый и абстрактный.
byte GetNumberOfPoints();
}
Замечание. По соглашению имена интерфейсов в библиотеках базовых классов .NET имеют префикс "I" (прописная буква "i" латинского алфавита). При создании пользовательского интерфейса рекомендуется придерживаться аналогичных правил.
Как видите, интерфейс IPointy определяет единственный метод. Однако типы интерфейса в .NET могут также определять любое число свойств. Например, можно определить интерфейс IPointy, в котором используется доступное только для чтения свойство вместо традиционного метода чтения данных.
// Реализация поведения в виде свойства, доступного только для чтения.
public interface IPointy {
byte Points {get;}
}
Вы должны понимать, что типы интерфейса сами по себе совершенно бесполезны, поскольку они представляют собой всего лишь именованные коллекции абстрактных членов. В этой связи вы не можете размещать типы интерфейса так, как это делается с классом или структурой.
// Создавать типы интерфейса с помощью "new" не допускается.
static void Main(string[] args) {
IPointy p = new IPointy(); // Ошибка компиляции!
}
Интерфейсы не приносят пользы, если они не реализованы некоторым классом или структурой. Здесь IPointy является интерфейсом, отражающим "наличие вершин". Такое поведение может быть полезным в иерархии форм, построенной нами в главе 4. Идея очень проста: некоторые классы в иерархии форм имеют вершины (например, Hexagon – шестиугольник), а другие (например, Circle – круг) вершин не имеют. Реализовав интерфейс IPointy в Hexagon и Triangle, вы можете предполагать, что оба класса поддерживают общий тип поведения, а поэтому и общее множество членов.
- Определение интерфейсов в C#
- Реализация интерфейсов в C#
- Интерфейсы в сравнении с абстрактными базовыми классами
- Вызов членов интерфейса на уровне объекта
- Интерфейсы в качестве параметров
- Интерфейсы в качестве возвращаемых значений
- Массивы интерфейсных типов
- Явная реализация интерфейса
- Построение иерархии интерфейсов
- Реализация интерфейсов в Visual Studio 2005
- Создание перечислимых типов (Enumerable и IEnumerator)
- Создание клонируемых объектов (ICloneable)
- Создание сравнимых объектов (IComparable)
- Интерфейсы из пространства имен System.Collections
- Классы из пространства имен System.Collections
- Пространство имен System.Collections.Specialized
- Резюме
- 8.8.5. Шаг 4. Задание интерфейсов классов
- Определение диапазона адресов
- Определение и реализация интерфейсов
- 1.6. Определение человекоориентированного интерфейса
- 1.2. Определение количества информации. Единицы измерения количества информации
- Определение версии клиента
- Определение пользовательского формата числовых данных
- Определение целей. Построение цепочек
- Определение необходимого системного вызова
- Раздел 1 Лояльность: определение и ключевые факторы
- Определение позиционного уровня
- 3.3. Определение объектов защиты