Принципы объектно-ориентированного программирования

         

Теперь этот пример выдаст следующее



bound.Bind();

> } 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 и квалифицировать имя члена именем интерфейса:



Содержание раздела