На этом шаге мы рассмотрим задание ограничений на обобщенные параметры в интерфейсах.
Похожим образом накладываются ограничения на обобщенные параметры в интерфейсах. В примере ниже представлена программа, в которой описывается обобщенный интерфейс (на обобщенные параметры которого накладываются ограничения), а затем путем реализации этого интерфейса создается обобщенный класс.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr266_1 { // Обобщенный интерфейс с ограничением // на обобщенный параметр: interface MyInterface<T> where T: struct{ void show(); } // Обобщенный класс реализует обобщенный интерфейс: class MyClass<T>: MyInterface<T> where T: struct { // Поле обобщенного типа: public T val; // Конструктор: public MyClass(T v) { val = v; } // Описание метода из интерфейса: public void show() { Console.WriteLine("Tип {0}: значение {1}", typeof(T).Name, val); } } // Главный класс: class Program { static void Main() { // Создание объектов на основе обобщенного класса: MyClass<int> A = new MyClass<int>(100); MyClass<char> B = new MyClass<char>('B'); // Вызов метода из объектов: A.show(); B.show(); // Задержка: Console.ReadLine(); } } }
При выполнении программы получаем следующий результат:
Рис.1. Результат работы приложения
Обобщенный интерфейс MyInterface описан с обобщенным параметром T, на который накладывается ограничение where T: struct. Ограничение означает, что обобщенный параметр T может "скрывать" за собой нессылочный тип. В интерфейсе объявлен метод show() без аргументов, не возвращающий результат.
Обобщенный класс MyClass реализует интерфейс MyInterface. Ограничение на обобщенный параметр в классе указано такое же, как и в интерфейсе. В классе описано поле val обобщенного типа. Значение поля отображается при вызове метода show(). Также отображается значение обобщенного параметра.
В главном методе создаются объекты A и B класса MyClass. Значение полю val объектов присваивается при создании объектов. Для проверки значений полей из объектов вызывается метод show().
На следующем шаге мы закончим изучение этого вопроса.