Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Интерфейсы в качестве параметров
Интерфейсы в качестве параметров
Поскольку интерфейсы являются полноценными типами .NET, вы можете конструировать методы, которые будут использовать интерфейсы, как параметры. Для примера предположим, что мы определили другой интерфейс с именем IDraw3D.
// Моделируем возможность отображения типа в пространстве.
public interface IDraw3D {
void Draw3D();
}
Предположим также, что две из наших трех форм (Circle и Hexagon) сконфигурированы для поддержки этого нового поведения.
// Circle поддерживает IDraw3D.
public class Circle: Shape, IDraw3D {
…
public void Draw3D() {
Console.WriteLine("3D-отображение окружности!");
}
}
// Hexagon поддерживает IPointy и IDraw3D.
public class Hexagon: Shape, IPointy, IDraw3D {
…
public void Draw3D() { Console.WriteLine ("3D-отображение шестиугольника!"); }
}
На рис. 7.3 показана соответствующая обновленная диаграмма классов, полученная в Visual Studio 2005.
Рис. 7.3. Обновленная иерархия форм
Если определить метод, использующий интерфейс IDraw3D в виде параметра, вы получите возможность передать любой объект, реализующий IDraw3D (но если вы попытаетесь передать тип, не поддерживающий нужный интерфейс, будет сгенерирована ошибка компиляции). Рассмотрим следующий фрагмент программного кода.
// Создание нескольких форм.
// Если это возможно, их отображение в трехмерном виде.
public class Program {
// Отображение форм, поддерживающих IDraw3D.
public static void DrawIn3D(IDraw3D itf3d) {
Console.WriteLine("-› Отображение IDraw3D-совместимого типа");
itf3d.Draw3D();
}
static void Main() {
Shape [] s = {new Hexagon(), new Circle(), new Triangle("Joe"), new Circle("JoJo")};
for (int i = 0; i ‹ s.Length; i++) {
…
// Можно ли отобразить в 3D-виде?
if (s[i] is IDraw3D) DrawIn3D((IDraw3D)s[i]);
}
}
}
Обратите внимание на то, "что треугольник не отображается, поскольку он не является IDraw3D-совместимым (рис. 7.4).
Рис.7.4. Интерфейсы в качестве параметров
- Определение интерфейсов в C#
- Реализация интерфейсов в C#
- Интерфейсы в сравнении с абстрактными базовыми классами
- Вызов членов интерфейса на уровне объекта
- Интерфейсы в качестве параметров
- Интерфейсы в качестве возвращаемых значений
- Массивы интерфейсных типов
- Явная реализация интерфейса
- Построение иерархии интерфейсов
- Реализация интерфейсов в Visual Studio 2005
- Создание перечислимых типов (Enumerable и IEnumerator)
- Создание клонируемых объектов (ICloneable)
- Создание сравнимых объектов (IComparable)
- Интерфейсы из пространства имен System.Collections
- Классы из пространства имен System.Collections
- Пространство имен System.Collections.Specialized
- Резюме
- Интерфейсы в качестве возвращаемых значений
- Интерфейсы из пространства имен System.Collections
- Единое имя файла параметров InterBase
- 5.21 IP-адреса, интерфейсы и множественное пребывание
- Множественные интерфейсы и имена методов
- 2.2 Интерфейсы IDE, EIDE и АТА
- 7.5 Программные интерфейсы приложений для адаптеров шины
- Использование параметров библиотек документов
- Абстрактные базы как двоичные интерфейсы
- Настройка основных параметров BIOS
- Настройка дополнительных параметров BIOS
- Пропуск параметров типа