val = value;
}
}
public int this[int index] {
get {
val = 0;
for(int i=0; i < index; i++) val += 2;
return val;
}
}
}
// Продемонстрировать применение интерфейсного индексатора,
class SeriesDemo4 {
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Сбросить в 0");
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
Следующее число равно 0
Следующее число равно 2
Следующее число равно 4
Следующее число равно 6
Следующёе число равно 8
Наследование интерфейсов
Один интерфейс может наследовать другой. Синтаксис наследования интерфейсов такой же, как и у классов. Когда в классе реализуется один интерфейс, наследующий другой, в нем должны быть реализованы все члены, определенные в цепочке наследования интерфейсов, как в приведенном ниже примере.
// Пример наследования интерфейсов,
using System;
public interface IA {
void Meth1();
void Meth2() ;
}
/
/ В базовый интерфейс включены методы Meth1() и Meth2(),
// а в производный интерфейс добавлен еще один метод — Meth3().
public interface IB : IA {
void Meth3();
}
// В этом классе должны быть реализованы
//все методы интерфейсов IA и IB.
class MyClass : IB {
public void Meth1() {
Console.WriteLine("Реализовать метод Meth1().");
}
public void Meth2() {
Console.WriteLine("Реализовать метод Meth2().");
}
public void Meth3() {
Console.WriteLine("Реализовать метод Meth3().");
}
}
class IFExtend {
static void Main() {
MyClass ob = new MyClass();
ob.Meth1();
ob.Meth2();
ob.Meth3();
}
}
Ради интереса попробуйте удалить реализацию метода Meth1()
из класса MyClass
. Это приведет к ошибке во время компиляции. Как пояснялось ранее, в любом классе, реализующем интерфейс, должны быть реализованы все методы, определенные в этом интерфейсе, в том числе и те, что наследуются из других интерфейсов.
Сокрытие имен при наследовании интерфейсов
Когда один интерфейс наследует другой, то в производном интерфейсе может быть объявлен член, скрывающий член с аналогичным именем в базовом интерфейсе. Такое сокрытие имен происходит в том случае, если член в производном интерфейсе объявляется таким же образом, как и в базовом интерфейсе. Но если не указать в объявлении члена производного интерфейса ключевое слово new, то компилятор выдаст соответствующее предупреждающее сообщение.
Явные реализации