Контролировать доступ к дочерним элементам управления в базовом классе? - PullRequest
0 голосов
/ 10 ноября 2010

Позвольте мне предвосхитить этот вопрос, заявив, что я обычно не оправдываю практику применения принципов наследования к дизайну пользовательского интерфейса;то есть разработка специфичного для приложения Form или UserControl с несколькими дочерними элементами управления и расширение его на подклассы, которые добавляют элементы управления или изменяют макет этих элементов в базовом классе.Иногда это кажется элегантным дизайнерским решением, но редко получается таким образом ...

Имея это в виду, у меня есть вопрос, касающийся контроля доступа к дочерним элементам управления в приведенном выше сценарии;Есть ли безопасный способ предотвратить доступ / изменение дочерним классом подкласса в базовом классе?

Я знаю, что основной способ достижения этого заключается в использовании (по умолчанию) private модификатора доступа при объявлениипеременные-члены для дочерних элементов управления;однако это не мешает подклассу получить доступ к элементу управления в его базовом классе, например так:

base.Controls["someControl"].Text = "Look, I vandalised your control";

Обфусцирование имен элементов управления дает мало и пытается скрыть свойство Controls с помощью newтакже не решает проблему (поскольку подкласс может привести свой базовый тип обратно к Control и получить доступ к свойству таким образом).Обратите внимание, что эта проблема также применима при доступе к элементу управления за пределами области действия класса - все, что вам нужно, это ссылка на элемент управления / форму, и тогда вы можете приступить к изменению дочерних элементов управления в соответствии с вашим сердцем.

Итак, какие методы вы бы порекомендовали для защиты (определенных) дочерних элементов управления от подобных манипуляций?

1 Ответ

1 голос
/ 10 ноября 2010

Все, что выше private, может показаться чрезмерным.Рядом со свойством Controls всегда есть и Reflection.

Модификатор доступа private не относится к безопасности, это инструмент организации.Считай это забором по колено.

Так что вашим лучшим решением будет поговорить с вашими программистами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...