C# - Главная Пространство имен
► System ► Microsoft Для учеников (начинающих)
► Видео уроки ► Обучение ► Примеры программ ► Секреты в Си Шарп Для профессионалов
► Обучение ► Примеры программ ► Задачки - для тебя! |
Интерфейсные индексаторыВ интерфейсе можно определить и индексатор. Объявление индексатора в интерфейсе имеет следующий формат записи: // Интерфейсный индексатор тип_элемента this[int индекс]{ get; set; ) Индексаторы, предназначенные только для чтения или только для записи, содержат только get- или set-метод, соответственно. Предлагаем еще одну версию интерфейса iSeries, в который добавлен индексатор, предназначенный только для чтения элемента ряда. // Добавление в интерфейс индексатора. using System; public interface ISeries { // Интерфейсное свойство, int next { get; // Возвращает следующее число ряда, set; // Устанавливает следующее число ряда. } // Интерфейсный индексатор, int this[int index] { get; // Возвращает заданный член ряда. } // Реализация интерфейса ISeries, class ByTwos : ISeries { int val; public ByTwos() { val = 0; } // Получаем или устанавливаем значение с помощью // свойства, public int next { get { val += 2; return val; } set { val = value; } } // Получаем значение с помощью индексатора, public int this[int index] { get { val = 0; for (int i=0; i<index; i++) val += 2; return val; } } // Демонстрируем использование интерфейсного индексатора, class SeriesDemo4 { public static void Main() { ByTwos ob = new ByTwos(); // Получаем доступ к ряду посредством свойства, for(int i-0; i < 5; i++} Console.WriteLine("Следующее значение равно " + ob.next); Console.WriteLine("\nНачинаем с числа 21"); ob.next = 21; for(int i=0; i < 5; i++) Console.WriteLine("Следующее значение равно " + ob.next); Console.WriteLine("\nПереход в исходное состояние."); ob.next - 0; // Получаем доступ к ряду посредством индексатора, for(int i-0; i < 5; i++) Console.WriteLine("Следующее значение равно " + ob[i]); } ) Вот результаты, сгенерированные этой программой: Следующее значение равно 2 Следующее значение равно 4 Следующее значение равно 6 Следующее значение равно 8 Следующее значение равно 10 Начинаем с числа 21 Следующее значение равно 23 Следующее значение равно 25 Следующее значение равно 27 Следующее значение равно 29 Следующее значение равно 31 Переход в исходное состояние. Следующее значение равно 0 Следующее значение равно 2 Следующее значение равно 4 Следующее значение равно 6 Следующее значение равно 8 В Наследование интерфейсов Один интерфейс может унаследовать "богатство" другого. Синтаксис этого механизма аналогичен синтаксису, используемому для наследования классов. Если класс реализует интерфейс, который наследует другой интерфейс, этот класс должен обеспечить способы реализации для всех членов, определенных внутри цепочки наследования интерфейсов. Рассмотрим такой пример: // Один интерфейс может наследовать другой. using System; public interface A { void methl(); void meth2() ; } // Интерфейс В теперь включает методы methlО и meth2(), // а также добавляет метод meth3(). public interface В : A { void meth3 () ; } // Этот класс должен реализовать все методы // интерфейсов А и В. class MyClass : В { public void methl() { Console.WriteLine("Реализация метода methl()."); } public void meth2() { Console.WriteLine("Реализация метода meth2()."); } public void meth3() { Console.WriteLine("Реализация метода meth3()."); } } class IFExtend { public static void Main() { MyClass ob = new MyClassО; ob.methlO; ob.meth2() ; ob.meth3(); } Если бы в качестве эксперимента вы попытались удалить метод methl (), реализованный в классе MyClass, то сразу же получили бы от компилятора сообщение об ошибке. Как упоминалось выше, любой класс, который реализует интерфейс, должен реализовать все методы, определенные этим интерфейсом, включая методы, которые унаследованы от других интерфейсов.
Просмотров: 3427 |