Позвольте мне предвосхитить этот вопрос, заявив, что я обычно не оправдываю практику применения принципов наследования к дизайну пользовательского интерфейса;то есть разработка специфичного для приложения Form
или UserControl
с несколькими дочерними элементами управления и расширение его на подклассы, которые добавляют элементы управления или изменяют макет этих элементов в базовом классе.Иногда это кажется элегантным дизайнерским решением, но редко получается таким образом ...
Имея это в виду, у меня есть вопрос, касающийся контроля доступа к дочерним элементам управления в приведенном выше сценарии;Есть ли безопасный способ предотвратить доступ / изменение дочерним классом подкласса в базовом классе?
Я знаю, что основной способ достижения этого заключается в использовании (по умолчанию) private
модификатора доступа при объявлениипеременные-члены для дочерних элементов управления;однако это не мешает подклассу получить доступ к элементу управления в его базовом классе, например так:
base.Controls["someControl"].Text = "Look, I vandalised your control";
Обфусцирование имен элементов управления дает мало и пытается скрыть свойство Controls
с помощью new
также не решает проблему (поскольку подкласс может привести свой базовый тип обратно к Control
и получить доступ к свойству таким образом).Обратите внимание, что эта проблема также применима при доступе к элементу управления за пределами области действия класса - все, что вам нужно, это ссылка на элемент управления / форму, и тогда вы можете приступить к изменению дочерних элементов управления в соответствии с вашим сердцем.
Итак, какие методы вы бы порекомендовали для защиты (определенных) дочерних элементов управления от подобных манипуляций?