* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Интерфейсы как средство достижения полиморфизма
8 февраля 2009
Любой объект, в котором реализован некоторый интерфейс, способен к взаимо- действию с любым другим объектом, требующим этот интерфейс, например:
Visual Basic .NET Public Sub GoSomewhere(ByVal V As IDrivable) Реализация опущена End Sub Visual C# Объявленному здесь методу необходимо, чтобы в его аргументе был реализован интерфейс IDrivable. Следовательно, этому методу можно передать любой объект, где реализован этот интерфейс, попутно этот объект неявно преобразуется в тип соответствующего интерфейса. Объектам, взаимодействующим через реализован- ный в них интерфейс, доступны только члены этого интерфейса. Кроме того, разрешается явно преобразовывать объекты, в которых реализован некоторый интерфейс, к типу этого интерфейса. Следующий пример демонстриру- ет преобразование объекта Truck к типу интерфейса IDrivable (заметьте: чтобы это сработало, в объекте Truck необходимо реализовать интерфейс IDrivable); Visual Basic .NET Dim myTruck As New Truck{) Dim myVehicle As IDrivable 1 Преобразование объекта myTruck в тип интерфейса IDrivable myVehicle = CType(IDrivable, myTruck) Visual C# Truck rnyTruck ~ new Truck(); IDrivable myVehicle; // Преобразование объекта myTruck в тип интерфейса IDrivable myVehicle = (IDriva3le}myTruck; Реализация интерфейсов Чтобы в программе на Visual Basic реализовать интерфейс в классе или структуре, следует воспользоваться ключевым словом Implements, а в Visual C# для этой цели применяется двоеточие, вот пример: Visual Basic .NET Public Class Truck Implements IDrivable Реализация опущена End Class Visual C# public class Truck : IDrivable { // Реализация опущена } В классах реализуется несколько интерфейсов. Чтобы объявить такой класс, ука- жите все необходимые интерфейсы через запятую, как показано ниже. Visual Basic .NET Public Class Truck Implements IDrivable, IFuelBurning, ICargoCarrying Реализация опущена End Class Visual C# public class Truck : IDrivable, IFuelBurning, ICargoCarrying // Реализация опущена } Если в классе или структуре реализован некоторый интерфейс, необходимо предоставить реализацию для всех его членов, то же правило действует, если реали- зовано несколько интерфейсов.