Void GoForward (int Speed);
}
public class Truck: IDrivable
{
public void GoForward (int Speed)
{
// Реализация опущена
}
}
Реализованные таким способом члены интерфейса доступны как интерфейсу, так и самому реализующему классу:
Truck track = new Truck ();
track.GoForward (120); // Это работает
(track as IDrivable).GoForward (120); // И это работает
Допускается явная реализация интерфейса в классе. Реализованные явно члены доступны только после преобразования объекта в тип интерфейса. Чтобы реализовать член интерфейса явно, следует объявить в классе одноименный член, указав при нем полное имя интерфейса. Например:
public class Truck: IDrivable
{
Void iDrivable.GoForward (int Speed)
{
// Реализация опущена
}
}
……………………………………………………………
track.GoForward (120); // Это не работает
(track as IDrivable).GoForward (120); // Это работает
Поскольку в этом примере член интерфейса реализован явно, его уровень доступа в реализации не указывается. Он определяется модификатором, заданным для самого интерфейса.
Явная реализация интерфейса оказывается полезной, например, в случае, когда класс реализует два интерфейса, содержащие одноименные методы.
Резюме
Интерфейс определяет поведение объекта и содержит описание поддерживаемых членов. Ими могут быть методы, свойства и события.
Объект, реализующий некоторый интерфейс, может взаимодействовать с любым другим объектом, которому необходим этот интерфейс.
За реализацию членов интерфейса отвечает класс или структура, в которой этот интерфейс реализован. В классах, как и в структурах, допускается реализация нескольких интерфейсов.
Класс или структура, реализующая некоторый интерфейс, должна обеспечить реализацию всех членов, объявленных в этом интерфейсе.
В С# члены интерфейса реализуются двумя способами:
реализация члена с именем, сигнатурой и уровнем доступа, идентичными соответствующему члену интерфейса. Такие члены доступны как через реализующий класс, так и через интерфейс;
явная реализация члена интерфейса с указанием его полного имени. Такие члены доступны только через интерфейс.
