MyClass ob = new MyClass();

ob.Methl() ; ob.Meth2 (); ob.M^th3();

Ради интереса попробуйте удалить реализацию метода Methl () из класса MyClass. Это приведет к ошибке во время компиляции. Как пояснялось ранее, в любом классе, реализующем интерфейс, должны быть реализованы все методы, определенные в этом интерфейсе, в том числе и те, что наследуются из другцх интерфейсов.

Сокрытие имен при наследовании интерфейсов

Когда один интерфейс наследует другой, то в производном интерфейсе может быть объявлен член, скрывающий член с аналогичным именем в базовом интерфейсе. Такое сокрытие имен происходит в том случае, если член в производном интерфейсе объявляется таким же образом, как и в базовом интерфейсе. Но если не указать в объявлении члена производного интерфейса ключевое слово new, то компилятор выдаст соответствующее предупреждающее сообщение.

Явные реализации

При реализации члена интерфейса имеется возможность указать его имяполностьювместе с именем самого интерфейса. В этом случае получаетсяявная реализация члена интерфейса, или простоявная реализация.Так, если объявлен интерфейс IMylF

interface IMylF { int MyMeth(int x) ;

}

то следующая его реализация считается вполне допустимой:

class MyClass : IMylF { int IMylF.MyMeth(int x) { return x / 3;

}

}

Как видите, при реализации члена MyMeth () интерфейса IMylF указывается его полное имя, включающее в себя имя его интерфейса.

Для явной реализации интерфейсного метода могут быть две причины. Во-первых, когда интерфейсный метод реализуется с указанием его полного имени, то такой метод оказывается доступным не посредством объектов класса, реализующего данный интерфейс, а по интерфейсной ссылке. Следовательно, явная реализация позволяет реализовать интерфейсный метод таким образом, чтобы оннестал открытым членом класса, предоставляющего его реализацию. И во-вторых, в одном классе могут быть реализованы два интерфейса с методами, объявленными с одинаковыми именами и сигнатурами. Но неоднозначность в данном случае устраняется благодаря указанию в именах этих методов их соответствующих интерфейсов. Рассмотрим каждую из этих двух возможностей явной реализации на конкретных примерах.

В приведенном ниже примере программы демонстрируется интерфейсIEven,в котором объявляются два метода:IsEven () иIsOdd (). В первом из них определяется четность числа, а во второмего нечетность. ИнтерфейсIEvenзатем реализуется в классеMyClass.При этом методIsOdd() реализуется явно.

// Реализовать член интерфейса явно, using System;

Перейти на страницу:

Похожие книги