Добавить в цитаты Настройки чтения

Страница 177 из 502

<b>    ob.Next = 0;</b>

<b>    // Получить доступ к последовательному </b>

<b>    //ряду чисел с помощью индексатора </b>

<b>    for (int i=0; i &lt; 5; i++)</b>

<b>      Console.WriteLine(&quot;Следующее число равно &quot; + 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(&quot;Реализовать метод Meth1().&quot;);</b>

<b>  }</b>

<b>  public void Meth2() {</b>

<b>    Console.WriteLine(&quot;Реализовать метод Meth2().&quot;);</b>

<b>  }</b>

<b>  public void Meth3() {</b>

<b>    Console.WriteLine(&quot;Реализовать метод Meth3().&quot;);</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>