Интерфейсы в качестве параметров
Интерфейсы в качестве параметров
Поскольку интерфейсы являются полноценными типами .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. Интерфейсы в качестве параметров
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
В качестве послесловия
В качестве послесловия Целью данной книги является показать важность (иногда по-настоящему критическую) клиентской оптимизации и осветить ключевые моменты и проблемные места. Очень хочется верить, что после прочтения книги у читателя сложилось целостное представление
22.4. Запуск в качестве демона
22.4. Запуск в качестве демона При разработке программ, создаваемых для работы в качестве системных демонов, нужно очень внимательно проводить их становление как демонов для правильного определения всех деталей. Ниже приведен перечень тех обстоятельств, на которые
3.8. Фреймы в качестве парадигм
3.8. Фреймы в качестве парадигм «До тех пор, пока не была создана эта парадигма схоластов (средневековая теория „первого толчка“), маятники как таковые не были известны людям, а ученые видели в них только качающиеся камни. Существование маятников было открыто благодаря
16.8 В качестве заключения
16.8 В качестве заключения В этой главе я постарался подробно рассказать об основных особенностях в работе с файлами в Ubuntu. Надеюсь, вы смогли разобраться что к чему и уловить основные моменты. Напоследок хочется заметить, что Ubuntu без какого-либо дополнительного
8.2. Сопротивление в качестве параметра
8.2. Сопротивление в качестве параметра При изучении урока 5 вам пришлось изрядно потрудиться, чтобы, «вручную» изменяя значение R в RC-фильтре нижних частот, получить диаграмму, изображенную на рис. 5.18. С помощью параметрического анализа вы сможете сделать это гораздо
8.5. Коэффициенты в качестве глобальных параметров
8.5. Коэффициенты в качестве глобальных параметров До сих пор вы называли глобальными параметрами только значения компонентов, то есть сопротивление резисторов, индуктивность катушек и емкость конденсаторов. Однако за понятием «глобальный» кроется гораздо больше. Один
Массивы в качестве параметров (и возвращаемых значений)
Массивы в качестве параметров (и возвращаемых значений) После создания массива вы можете передавать его, как параметр, или получать его в виде возвращаемого значения. Например, следующий метод PrintArray() получает входной массив строк и выводит каждый элемент на консоль, а
Интерфейсы в качестве возвращаемых значений
Интерфейсы в качестве возвращаемых значений Интерфейсы можно использовать и в качестве возвращаемых значений методов. Например, можно создать метод, который берет любой System.Object, проверяет на совместимость с IPointy и возвращает ссылку на извлеченный интерфейс.// Этот метод
Делегаты в качестве параметров
Делегаты в качестве параметров Теперь, когда у нас есть новый тип делегата, который указывает на методы, получающие Car в виде параметра и не возвращающие ничего, мы можем создавать функции, которые принимают этот делегат в виде параметра. Для примера предположим, что у нас
Структуры в качестве аргументов функции
Структуры в качестве аргументов функции В не расширенном языке Си можно передавать функции адрес структуры. Например, если montana является структурной переменной структурного типа player, мы можем обратиться к функции следующим образом: stats(&montana);Функция stats( ) будет иметь
7.3.4. Абстрактные контейнерные типы в качестве параметров
7.3.4. Абстрактные контейнерные типы в качестве параметров Абстрактные контейнерные типы, представленные в главе 6, также используются для объявления параметров функции. Например, можно определить putValues() как имеющую параметр типа vectorint вместо встроенного типа
Выражения в качестве операндов
Выражения в качестве операндов Операндом при увеличении или уменьшении значения TIMESTAMP, TIME, DATE или DATE в диалекте 1 может быть константа или выражение. Выражение может быть особенно полезным в ваших приложениях, когда вам надо увеличить или уменьшить значение в секундах,
Обобщенные подпрограммы в качестве параметров
Обобщенные подпрограммы в качестве параметров Обобщенная подпрограмма может выступать в качестве формального параметра другой обобщенной подпрограммы.Например, в классе System.Array имеется несколько статических обобщенных методов с обобщенными подпрограммами в качестве
Глава 5 О качестве снимков
Глава 5 О качестве снимков Пожалуй, разговор о качестве снимков можно считать краеугольным камнем темы продажи своих фотографий на микростоковых сайтах. Очень часто, когда люди, в целом далекие от искусства фотографии, слышат о том, что кто-то продает свои фотоснимки и