* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Реализация полиморфизма через интерфейсы
8 февраля 2009

Интерфейсы определяют поведение класса. Один и тот же интерфейс можно реа-
лизовать в самых разных классах, что позволяет им взаимодействовать друг с дру-
гом, воплощая концепцию полиморфизма. На этом занятии вы научитесь объяв-
лять и реализовывать интерфейсы, а также узнаете, как объекты взаимодействуют
через интерфейсы.
Изучив материал этого занятия, вы сможете:
^ определять интерфейсы;
S создавать реализацию интерфейса;
^ объяснить, каким образом удается реализовать полиморфизм через
интерфейсы.
Продолжительность занятия - около 30 минут.
В данном контексте интерфейс — это некое соглашение. Любой объект, в кото-
ром реализован данный интерфейс, гарантированно содержит реализацию для чле-
нов, объявленных в этом интерфейсе. Если объект поддерживает некоторый интер-
фейс, любой другой объект, в котором реализован этот интерфейс, окажется спосо-
бен взаимодействовать с ним.
Интерфейс определяет только члены, реализованные в объекте. В определении
интерфейса ничего не говорится о реализации его членов — оно содержит лишь
описание типов параметров и возвращаемых значений. Реализация членов, объяв-
ленных в интерфейсе, целиком и полностью ложится на класс, в котором этот ин-
терфейс реализован.
Так, в разных объектах одни и те же члены интерфейса реализуются совершенно
по-разному. Рассмотрим интерфейс IShape, определяющий единственный метод —
Calculate Area. При этом класс Circle, в котором реализован этот интерфейс, вычис-
ляет площадь фигуры совсем не так, как это делает класс Square, в котором также
реализован этот интерфейс. Тем не менее объект, которому необходимо взаимо-
действовать через IShape, способен вызвать метод CakulaleArea из класса Circle или
Square и получить корректный результат.
Определение интерфейсов
Интерфейсы определяются с помощью ключевого слова Interface (interface), напри-
мер, так:
Visual Basic .NET
Public Interface IDrivable
End Interface
Visual C#
public interface IDrivable
{:
Этот пример объявляет интерфейс IDrivable, но не определяет ни одного члена
этого интерфейса. Методы-члены интерфейса определяют с обычной сигнатурой
метода, но без модификаторов доступа, таких, как public, private и др. Модификатор
доступа, заданный для интерфейса, определяет уровень доступа для всех его чле-
нов. Таким образом, если интерфейс объявлен с модификатором Public, этот моди-
фикатор действует для всех его членов. Вот пример определения методов как чле-
нов интерфейса:
Visual Basic .NET
Public Interface IDrivable
Sub GoForward(ByVal Speed As Integer)
SUD Halt()
Function Distance! raveled() As Integer
End Interface
Visual C#
public interface IDrivable
{
void GoForward(int Speed):
void Halt():
int DistanceTraveled():
}
Помимо методов, в интерфейсах разрешается определять свойства. На Visual
Basic свойства-члены интерфейса необходимо определять с ключевым словом
ReadOnly или Write Only. В С# определение свойства включает метод-получатель
(getter), метод-установщик (setter) или оба этих метода. Определение свойства за-
вершается указанием типа значения, возвращаемого свойством. Вот пример опре-
деления свойства:
Visual Basic .NET
Public Interface IDrivable
Определения остальных членов опущены.
Это определение свойства, доступного только для чтения.
ReadOnly Property FuelLevelO As Integer
End Interface
Visual C#
public interface IDrivable
get;
// Чтобы сделать это свойство доступным только для чтения,
// объявите здесь метод set.
В отличие от свойств, поля не могут быть членами интерфейсов. Это гарантиру-
ет, что классы, взаимодействующие через интерфейсы, не получат доступ к внут-
ренним данным объектов.
Интерфейсы также определяют события, генерируемые объектами, в которых
этот интерфейс реализован. Любой класс, реализующий некоторый интерфейс, обя-
зан предоставлять реализацию для всех событий-членов этого интерфейса, но
объекты, взаимодействующие через этот интерфейс, не обязаны обрабатывать все
объявленные в нем события. Visual Basic .NET предоставляет тип-делегат по умол-
чанию для всех событий, а С# требует явно назначать событиям типы-делегаты. Вот
пример определения события, которое является членом интерфейса:
Visual Basic .NET
Public Interface IDrivable
Определения остальных членов опущены.
Event OutOfFuel(ByVal sender As Object, e As System.EventArgs)
End Interface
Visual C#
public interface IDrivable
{
// Определения остальных членов опущены.
event System.EventHandler OutOfFuel;
}
Чтобы определить интерфейс, объявите его с помощью ключевого слова Interface
(Visual Basic) или interface (C#) и добавьте к определению интерфейса сигнатуры
его членов — методов, свойств и событий.

Теги: .NET

Статьи по теме:

Специальные возможности и элементы управления Windows Forms
Реализация членов интерфейса на Visual Basic .NET
Разделяемые сборки
Cabinet File (*.CAB) Compression and Extraction – версия 9.9
Реализация специальных возможностей на этапе проектирования
Лямбда-выражения
Использование отладочных инструментов
Наследование от абстрактного класса
Blend PDF with Silverlight
Оповещение пользователя об ошибках ввода
Применение трассировочных переключателей
Назначение значка элементу управления
Создание экземпляров пользовательских типов
Примеси (mixin)
Применение типов данных
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Реализация полиморфизма через интерфейсы. Регион сайта: Москва и Санкт-Петербург