* При перепечатке материалов ссылка на 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

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

Тестирование элемента управления
Стратегия оптимизации
Члены типов CTS
Преобразование типов
Обработка ошибок при обновлении базы данных
Установка порядка передачи фокуса при нажатии клавиши Tab
Распространение приложений через Интернет
Извлечение данных с помощью объектов DataAdapter
Применение встроенной функциональности типов данных
Замыкания (closure)
Ограничения Foreign Key
Применение GDI+
Создание типизированного объекта DataSet с помощью XML Designer
Извлечение из сопутствующих сборок ресурсов, специфичных для культуры
Инкапсуляция
| .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 | Реализация полиморфизма через интерфейсы. Регион сайта: Москва и Санкт-Петербург