Страница 177 из 502
<b> ob.Next = 0;</b>
<b> // Получить доступ к последовательному </b>
<b> //ряду чисел с помощью индексатора </b>
<b> for (int i=0; i < 5; i++)</b>
<b> Console.WriteLine("Следующее число равно " + ob[i]);</b>
<b> }</b>
<b>}</b>
Вот к какому результату приводит выполнение этого кода.
<b>Следующее число равно 2 </b>
<b>Следующее число равно 4 </b>
<b>Следующее число равно 6 </b>
<b>Следующее число равно 8 </b>
<b>Следующее число равно 10</b>
<b>Начать с числа 21 </b>
<b>Следующее число равно 23 </b>
<b>Следующее число равно 25 </b>
<b>Следующее число равно 27 </b>
<b>Следующее число равно 29 </b>
<b>Следующее число равно 31</b>
<b>Сбросить в 0 </b>
<b>Следующее число равно 0 </b>
<b>Следующее число равно 2 </b>
<b>Следующее число равно 4 </b>
<b>Следующее число равно 6 </b>
<b>Следующёе число равно 8</b>
Наследование интерфейсов
Один интерфейс может наследовать другой. Синтаксис наследования интерфейсов такой же, как и у классов. Когда в классе реализуется один интерфейс, наследующий другой, в нем должны быть реализованы все члены, определенные в цепочке наследования интерфейсов, как в приведенном ниже примере.
<b>// Пример наследования интерфейсов,</b>
<b>using System;</b>
<b>public interface IA {</b>
<b> void Meth1();</b>
<b> void Meth2() ;</b>
<b>}</b>
<b>/</b><b>/ В базовый интерфейс включены методы Meth1() и Meth2(),</b>
<b>// а в производный интерфейс добавлен еще один метод — Meth3().</b>
<b> public interface IB : IA {</b>
<b> void Meth3();</b>
<b>}</b>
<b>// В этом классе должны быть реализованы </b>
<b>//все методы интерфейсов IA и IB. </b>
<b>class MyClass : IB {</b>
<b> public void Meth1() {</b>
<b> Console.WriteLine("Реализовать метод Meth1().");</b>
<b> }</b>
<b> public void Meth2() {</b>
<b> Console.WriteLine("Реализовать метод Meth2().");</b>
<b> }</b>
<b> public void Meth3() {</b>
<b> Console.WriteLine("Реализовать метод Meth3().");</b>
<b> }</b>
<b>}</b>
<b>class IFExtend {</b>
<b> static void Main() {</b>
<b> MyClass ob = new MyClass();</b>
<b> ob.Meth1();</b>
<b> ob.Meth2();</b>
<b> ob.Meth3();</b>
<b> }</b>
<b>}</b>
Ради интереса попробуйте удалить реализацию метода Meth1() из класса MyClass. Это приведет к ошибке во время компиляции. Как пояснялось ранее, в любом классе, реализующем интерфейс, должны быть реализованы все методы, определенные в этом интерфейсе, в том числе и те, что наследуются из других интерфейсов.
Сокрытие имен при наследовании интерфейсов
Когда один интерфейс наследует другой, то в производном интерфейсе может быть объявлен член, скрывающий член с аналогичным именем в базовом интерфейсе. Такое сокрытие имен происходит в том случае, если член в производном интерфейсе объявляется таким же образом, как и в базовом интерфейсе. Но если не указать в объявлении члена производного интерфейса ключевое слово new, то компилятор выдаст соответствующее предупреждающее сообщение.
Явные реализации
При реализации члена интерфейса имеется возможность указать его имя полностью вместе с именем самого интерфейса. В этом случае получается явная реализация члена интерфейса, или просто явная реализация. Так, если объявлен интерфейс IMyIF
<b>interface IMyIF { </b>
<b> int MyMeth(int x) ;</b>
<b>}</b>
то следующая его реализация считается вполне допустимой:
<b>class MyClass : IMyIF { </b>
<b> int IMyIF.MyMeth(int x) {</b>