Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Создание обобщенных интерфейсов

Создание обобщенных интерфейсов

Вы уже видели при рассмотрении пространства имен System.Collections. Generiс, что обобщенные интерфейсы в C# также допустимы (например, IEnumerable‹Т›). Вы, конечно, можете определить свои собственные обобщенные интерфейсы (как с ограничениями, так и без ограничений). Предположим, что нужно определить интерфейс, который сможет выполнять бинарные операции с параметрами обобщенного типа.

public interface IBinaryOperations‹T› {
 T Add(T arg1, T arg2);
 T Subtract(T arg1, T arg2);
 T Multiply(T arg1, T arg2);
 T Divide(T arg1, T arg2);
}

Известно, что интерфейсы остаются почти бесполезными, пока они не реализованы некоторым классом или структурой. При реализации обобщенного интерфейса поддерживающий его тип указывает тип заполнителя.

public class BasicMath: IBinaryOperations‹int› {
 public int Add(int arg1, int arg2) { return arg1 + arg2; }
 public int Subtract(int arg1, int arg2) { return arg1 – arg2; }
 public int Multiply(int arg1, int arg2) { return arg1 * arg2; }
 public int Divide(int arg1, int arg2) { return arg1 / arg2; }
}

После этого вы можете использовать BasicMath, как и ожидали.

static void Main(string[] args) {
 Console.WriteLine("***** Обобщенные интерфейсы *****n");
 BasicMath m = new BasicMath();
 Console.WriteLine("1 + 1 = {0}", m.Add(1, 1));
 Console.ReadLine();
}

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

public class BasicMath: IBinaryOperations‹double› {
 public double Add(double arg1, double arg2) { return arg1 + arg2; }
 …
}

Исходный код. Проект GenericInterface размещен в подкаталоге, соответствующем главе 10.

Оглавление книги


Генерация: 1.192. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз