>
}
I Теперь этот пример выдаст следующее: /
Calling EditBox.Bind()... J Binding to data store... •
/'
Calling (IDataBound))EditBox.Bind()... ; Binding to data store... '
Заметьте: хотя это приложение вызывает реализованный метод
Btyid
двумя способами — с помощью приведения и без него, оба вызова кс|р-ректно функционируют, в том смысле, что
Bind
выполняется. Хотя
цо-
началу возможность прямого вызова реализованного метода без приведения объекта к интерфейсу может показаться неплохой, порой это более чем нежелательно. Самая очевидная причина этого то, что реализация нескольких интерфейсов, каждый из которых может содержать массу членов, может привести к быстрому засорению отрытого пространства имен вашего класса членами, не имеющими значения за пределами видимости реализующего эти интерфейсы класса. Вы можете не позволять реализованным членам интерфейсов становиться открытыми членами класса, применяя методику
сокрытия имен
(name hiding).
В простейшем случае сокрытие имен представляет собой возможность скрывать имя унаследованного члена от любого кода за пределами производного или реализующего его класса [его часто называют
внешним миром
(outside world)]. Возьмем тот пример, где класс
EditBox
должен был реализовывать интерфейс
IDataBound,
но на этот раз
EditBox
не должен предоставлять методы
IDataBound
внешнему миру. Этот интерфейс нужен ему скорее для собственных нужд, или, возможно, программист просто не хочет засорять пространство имен класса многочисленными методами, которые обычно не используются клиентом. Чтобы скрыть член реализованного интерфейса, нужно лишь удалить модификатор доступа члена
public
и квалифицировать имя члена именем интерфейса: