Поиск

Объявление интерфейсов

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

Как предоставить такую возможность проверки элемента управления? Именно здесь проявляется превосходство интерфейсов. Вот пример простого интерфейса, единственным методом Validate:

interface IValidate {
boo! ValidateO; }

Теперь вы можете задокументировать тот факт, что если элемент управления реализует интерфейс IValidate, то этот элемент управления может быть проверен.

Рассмотрим пару аспектов, связанных с приведенным кодом. Во-первых, вы не должны задавать для метода интерфейса модификатор доступа, такой как public. При указании модификатора доступа перед объявлением метода возникает ошибка периода компиляции. Дело в том, что все методы интерфейса открыты по умолчанию (разработчики на C++ могут также заметить, что, поскольку интерфейсы по определению — это абстрактные классы, не требуется явно объявлять метод как "чисто" виртуальный (pure virtual), прибавляя =0к его определению).

Кроме методов, интерфейсы могут определять свойства, индексаторы и события:

interface lExamplelnterface {
// Пример объявления свойства.
int testProperty { get; }
// Пример объявления события, event testEvent Changed;
// Пример объявления индексатора, string this[int index] { get; set; } }